[ComponentDesignPatterns | ComponentDesignPatternsContext]
Overview
Many projects today use a component-based approach to developing software. ComponentBasedDevelopment stresses language and platform interoperability and separation of interface from implementation. Existing and newly constructed components are used on clients and servers to build flexible, reusable solutions.
Component software is usually built in the context of different scripting and programming environments used on different platforms with different frameworks. Sometimes the application spans many machines and components are distributed across platforms. The purpose of this pattern language is to capture some of the recurring themes and best practices in CBD that lead to winning software projects.
Scope
The ComponentDesignPatterns language covers component-based development for domestic (not distributed) and foreign (distributed) application solutions.
Currently, the technology set that is being used as a base for the varying pragmatic experiences and themes covered in this language are based on Microsoft, Sun Microsystems, and OMG technologies, tools, and products.
Some of the recent projects that the authors have experienced that followed certain themes covered in this pattern language are:
What is not in the scope is some of the very interesting research and bleeding-edge work being done in distributed systems that is not frequently being used to develop solutions in the industry. For instance, research in the area of eliminating the distinction between local and distributed computing by raising the level of machine abstraction is highly interesting, but not practical at this point (early 1999) in our industry.
For a more granular approach to understanding the scope of this language, see the Context and Applicability for the language and for each pattern.
Organization
If you take the language as a whole, you can see it much like a pattern, in that we are defining the elements of the overall pattern language in CanonicalForm (also known as CoplienForm). Like a pattern, the language has a name, problem, context, forces, solution containing sturcture, participants, and collaborations, a resulting context, related pattern languages, and known uses. We are defining the following elements:
ComponentAssemblerPatterns?
Status
This project is a work-in-progress. See ComponentDesignPatternsHistory for more information about what's happened since its inception.
There are a few dozen "patterns" that have emerged through this project. Some are directly applicable, some are ideas that may or may not survive, and some were hatched from this project but ended up being outside the context but related to CBD.
One big question we have right now is: how do we classify this thing? Criticism has been received that it's confusing to look at a list of 20 patterns and understand how they relate to each other when there's no taxonomy. Above, as we flesh more of this out, the Organization section should reflect our answer to this question.