473,386 Members | 1,860 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,386 software developers and data experts.

Application Architecture


I’m involved in upgrading an existing project that is made up of multi
functional units. For communication between each unit (RFI checking on
deletion and data retrieval) in the past a single communication module had
been compiled that referenced each functional unit. The communication module
then was reference by each functional unit. The communication module exposed
a very loose interface. E.g. if you wanted an address and you were in
another module, you would call the communication module and ask for an
address, it would look at the address module and handle UI and BO interaction
as required.
I have a couple of issues with this approach.
1. Circular referencing A references B, B references A. Building the
solution takes 2 parses etc.
2. The loose interface defined in the communication module meant developer
struggled to know what to pass through. Arguments were being passed in as
datarow’s in a datatable, and could only really be understood by looking the
functional units handling of the communication modules call.
I have been looking at different options, but I keep coming back to a
Circular reference.
Is there a better pattern or approach? The circular reference works it just
difficult to maintain and develop with. Also have an issue with when a new
functional unit is created that the customer may not be purchasing, because
the communication module requires a reference, it would be distributed even
than it would never be used. Late binding with defined interfaces would get
around this.
An comments or ideas?
Andy Stewart

Sep 1 '08 #1
1 1290

"Andrew Stewart" <An***********@discussions.microsoft.comwrote in message
news:F0**********************************@microsof t.com...
>
I'm involved in upgrading an existing project that is made up of multi
functional units. For communication between each unit (RFI checking on
deletion and data retrieval) in the past a single communication module had
been compiled that referenced each functional unit. The communication
module
then was reference by each functional unit. The communication module
exposed
a very loose interface. E.g. if you wanted an address and you were in
another module, you would call the communication module and ask for an
address, it would look at the address module and handle UI and BO
interaction
as required.
I have a couple of issues with this approach.
1. Circular referencing A references B, B references A. Building the
solution takes 2 parses etc.
2. The loose interface defined in the communication module meant developer
struggled to know what to pass through. Arguments were being passed in as
datarow's in a datatable, and could only really be understood by looking
the
functional units handling of the communication modules call.
I have been looking at different options, but I keep coming back to a
Circular reference.
Is there a better pattern or approach? The circular reference works it
just
difficult to maintain and develop with. Also have an issue with when a
new
functional unit is created that the customer may not be purchasing,
because
the communication module requires a reference, it would be distributed
even
than it would never be used. Late binding with defined interfaces would
get
around this.
An comments or ideas?
You don't specify whether communication between the units is some form of
RPC, or whether you just mean cross-assembly calls. If the latter, then two
advices I can give to avoid overly tight coupling, and explicit circular
references, is to extract all interfaces used for cross-assembly calls into
separate assemblies (so that code that needs to call another assembly only
references the interface assembly for it, not the actual implementation),
and use an inversion of control / dependency injection container such as
Unity or Castle Windsor to bind your assemblies together at run-time.
Something along these lines:

// IFoo.dll
interface IFoo
{
void DoFoo();
}

// Foo.dll
// refs: IFoo.dll, IBar.dll
class Foo : IFoo
{
[Dependency] private IBar Bar;
void DoFoo() { Bar.DoBar(); }
}

// IBar.dll
interface IBar
{
void DoBar();
}

// Bar.dll
// refs: IFoo.dll, IBar.dll
class Bar : IBar
{
[Dependency] private IFoo Foo;
void DoBar() { Foo.DoFoo(); }
}

<!-- app.config -->
...
<type type="IFoo, IFoo" mapTo="Foo, Foo" />
<type type="IBar, IFoo" mapTo="Bar, Bar" />

Sep 2 '08 #2

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

21
by: Lasher | last post by:
Hi, I have clients using an application that allows users to change their passwords. The application uses the 'ALTER USER xxx IDENTIFIED BY.....' command. What I need to do is use Oracle to...
1
by: Vin | last post by:
Hi, I've got a VB.Net + ASP.Netmessage board application which has already been customized. There are two solutions in this application. 1. The front end aspx, aspx.vb files, User controls...
6
by: Jay Douglas | last post by:
Greetings, I'm hoping somebody can help me come up with a quick software architecture solution to address the following issue: I need to come up with an Winforms (or something similar)...
1
by: epigram | last post by:
I'm creating a data-centric asp.net application that will be using SQL Server 2000. I'm looking for some articles, design tips, etc. to help me decide how I should design my application. I...
2
by: Mahesh Kumar.R | last post by:
I'm into designing an application in winforms but in near future my client may request the same thing in webforms. so (1) what are all the design guidelines and ways are there to migrate easily in...
22
by: Jordan S. | last post by:
SQL Server will be used as the back-end database to a non trivial client application. In question is the choice of client application: I need to be able to speak intelligently about when one...
7
by: Vincent Delporte | last post by:
Hello I'm interested in hearing reflections by seasoned web app developpers about the different ways to write PHP apps, and especially how they compare in terms of performance, whether it's the...
0
by: jehugaleahsa | last post by:
On Jun 13, 3:09 pm, "Bob Powell " <b...@spamkillerbobpowell.net> wrote: I apologize for the size. I should have probably put this on a blog or something. I'm not interested in tools. I...
1
by: abhijitbkulkarni | last post by:
Hello, I am designing a .NET database application that uses 3 tier architecture. Starting initially, this application will be desktop application but I will convert it into a website later but...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.