Dear list members,
I agree that versioning is a realistic problem for many organizations. The
messaging Design Pattern (MDP) improves versioning. Versioning is breafly
metioned in the paper (one paragraph - consequences section). It will probably
require a separate write up (several pages) to explain it in detail.
An analogy may illustrate versioning. Human speech is constantly evolving. New
words, acronyms and phrases are being added to the language on a regular basis.
Human speech, as a messaging mechanism, is flexible enough to allow this. For
instance
think about the word "smartphone" (a few years old - the email software flags
it as misspelled). In a sense we are using "new" version of the language
(upgrading the language).The language is able to evolve. This is another
quality/property of messaging. It
provides for smooth versioning. This works provided that we do it in a backward
compatible
way (syntax/semantics of old words and phrases remain unchanged although some
may
become obsolete with time). The language evolves becoming more complex
because of the new information being handled. I can imagine the time where the
language
was very simple and consisted of a few words. Children start with a single word
in their vocabulary.
In terms of versioning, components that use MDP messaging behave in a similar
fashion. You can add new messages to the communication between components.
Traditional O-O technologies that don't rely on messaging present complexity
and limitations. Adding a new parameter to a function, and the software won't
compile. If you have a library of components, you will need to use the matching
version of the component library. Otherwise your software won't compile. You
need to keep and maintain several versions of the code. Usually each engineer
needs to keep a complete version of the whole software tree. Changes to the
code need to be merged. Coupling between components becomes an obstacle here.
Both components need to match, in terms of API, for the software to compile.
In general, under MDP you only need to keep the latest version of the component
library as long as the messaging is backward compatible We also need to keep
in mind the complexity of the problem. Let's say that we have 1000 components.
Let's say that each component need to makes 5 distint calls to external
components. We are talking about about 5000 function API calls (rough estimate
number). Under MDP you have one messaging interface (or a few) that doesn't
change. You can compile and run against the latest version of the MDP component
library. In general, new version of the library doesn't break
compilation/running version. This can also give you an idea of simplicity. It
is one messaging primitive versus 5000 API calls (very rough estimate). Any
changes/versions and the program will not compile under the traditional O-O
approach. It becomes a complex problem to manage. If we are using RPCs it
becomes even more complicated.
Ideally you can also divide the work so that only one person is responsible for
a MDP component. This minimizes or avoids merging. The components only need to
agree on the syntax/semantic of the messaging being exchanged. In general old
code is compatible with new versions of the MDP component(s):
"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."
We can say that our language is becoming more complex on a regular basis. This
is probably accurate. It needs to be that way because we are dealing with more
information (new words, phrases, etc). I don't believe we can get around this
additional complexity. Complexity increases because we need to handle more
information. On the other hand, messaging is simpler than the traditional
approach.
Notice that when we are listening, we are processing information. We are also
making decisions based on the information received (message subject/topic, tone
of the voice, sender, etc.)
Arguably, not much different from MDP components that behave like a state
machine and process information (messages) making decisions based on the
messaging received:
processMessage (message) // MDP messaging interface
I hope I was able to answer the questions/comments posted so far. Please let me
know if I overlooked anything since I received a fair amount of comments and
question. Feel free to send me email or post to list if there is anything that
needs further clarification.
Regards
Al
_______________________________________________
patterns-discussion mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/patterns-discussion