Phill,

The example was provided within the context of versioning. I hope it is more 
clear how/why the Messaging Design Pattern (MDP) improves versioning: 

"In general, there is no need to change someone else’s code. The need for 
creating,
maintaining and merging several versions of the code is also minimized or 
eliminated."

In terms of your questions, they are linked a related subject.  We probably 
need to look into the messaging API (processMessage) in more detail.

"As regards the claim "about 5000 function API calls (rough estimate number)" 
being reduced under MDP to "one messaging interface (or a few) that doesn't 
change", I'm having difficulty seeing this. Does not the one (or few) simply 
become 5000 if/else statements? How do you get around this?"

1) No. Not exactly. We can keep the 5000 function calls (same names) 
encapsulated inside the components as internal functions. The main difference 
is that each component communicates with other components via MDP messaging
(processMessage). Per our discussion, this is a realistic representation. It 
improves decoupling, encapsulation, scalability, versioning, etc. In reality, 
the components, the message, and the messaging mechanism are independent and 
decoupled. The implementation of processMessage will depend on how the incoming 
information (message) needs to be processed.

2) In regards to your second question (if/case statements), there is no need to 
get around it.
This is in harmony with reality. Reality, model and implementation go hand in 
hand.
Components make decisions based on the input messaging. Often this implies if 
or case
statements.

An analogy may illustrate these points. Currently you are reading this message 
word by word. Sentence by Sentence.The messages on the computer screen get 
transferred to your eyes, and eventually get transferred to another component 
(brain) via messaging. Several messaging mechanisms are involved including 
light, neural system, visual system, email. Obviously we process information as 
we read. Actually we are constantly processing information and making decisions 
(if/case) based on the information (messaging) received.  

It is similar when we read our email/text messages or go through the newspaper. 
We process the information and make decisions, based on specific pieces of 
information (headlines, email/text subject, email/text sender,etc). It is also 
similar when we
hear a voice. We make decisions depending on the input messaging (urgency, 
person
who is talking, tone of voice, loudness, distance, etc). A similar situation
happens when we approach a traffic light or a traffic sign. 

A lot of the information processing is done almost unconsciously. All our 
senses work 
in a similar fashion. We make decisions based on the incoming information 
(input messaging) This is similar to how processMessage (message) works and 
processes information. In a sense processMessage tries to mirror  reality. It 
is also helps explain why MDP components usually require if (or case) to 
process the input messages and make decisions. Reality, the model, and the 
implementation go hand in hand:

public interface JtInterface  {

/**
  * Messaging interface used for the implementation
  * of the messaging design pattern.
  * Process a message and return a reply. 
  */

  Object processMessage (Object msg);  


}

Process message often needs to make decisions based on pieces of the message
received: message subject, type, Id, etc. 
Obviously the processMessage implementation will depend on the functionality 
being provided.It is not always the case that we need to make a decision 
(if/case). You may need a component that translates a message from one format 
to another or add a list of numbers. 


In terms of compilation, the latest version of the paper contains a section 
discussing implementation considerations. The Messaging interface can be 
restricted to handle specific type of messaging. Syntactic errors will be 
catched at compilation time:

"public interface MyMessagingInterface {
                   MyOutputType processMessage (MyInputType message); }    

This is also a valid implementation of messaging. Advanced object oriented 
technologies provide features like Java generics which allow the types to be 
parameterized:

 public interface MDPInterface<Type, Type1>  {  Type1 processMessage (Type 
msg);  }"

Our hearing and visual senses are restricted to certain kind of messaging. MDP 
can mirror this same behavior.

As a point of information, a messaging queue is not needed unless we are 
dealing with asynchronous messaging and/or multithreading. We haven't discussed 
this so far. The versioning example only discusses synchronous communication 
(no message queue required). processMessage (message) is the only 
API/functionality required.

A message that gets overlooked is very unlikely because of the many software 
engineering steps that are required: project planning, schedules, development 
that involves communication between the team, unit testing, integration 
testing, Acceptance Testing, etc.  
For instance, under the TDD methodology this wouldn't be an issue: the test 
case for the specific message would fail very early (not later than 
development/Unit testing). 


I hope this helps clarify the versioning example and how the information is 
processed withing the context of the MDP messaging API. 

Regards,

Al








      
_______________________________________________
patterns-discussion mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/patterns-discussion

Reply via email to