Here are some types of software frameworks:
How do component and OO frameworks compare? There can be a lot of overlap. In many cases, component frameworks are implemented in the context of an OO language and one or several layered OO frameworks. Also, the party extending the framework from an abstract design solution into a concrete one may also be programming in an OO environment.
But since component frameworks are BlackBoxFrameworks? that define a set of AbstractInteractions with components that communicate with it, they are not limited to an OO context and can be implemented in object-based or non-object-oriented languages.
Also, another place we see people raising the level of abstraction at this level of reuse is in taking OO frameworks and layering component frameworks on top of them. This can allow for more flexibility since interface is separated from implementation.
An article appeared in the Jan. 1999 C++ Report by DougSchmidt that calls the business framework an Enterprise Framework that "...address vertical application domains, such as avionics mission computing, call processing, ..."
In addition, he defines both System Infrastructure and Middleware frameworks, which seem to fall under Technology Framework defined above.
I'd like to quote a bit more from DougSchmidt's aforementioned "How to make Software Reuse Work for You" article in the Jan'99 C++ Report. I think it is relevant here, as well as to ComponentDefinition and ComponentFrameworkDefinition:
Developers are often more comfortable adapting code to work in their own conceptual world instead of having to make the conceptual leap necessary to make their code cooperate within the micro-world imposed by the framework. The framework may provide more of a technological "push" model, doing more things for you, while the component is more of a "pull" model, making you do more of your own coding using ComponentGlue; but conceptually speaking the same push-vs-pull contrast work against developer familiarity/comfort: The component lets the developer stay in their own conceptual orientation while the framework pushes the developer into the conceptual world of the interaction memes and metaphors of the workframe provided by the framework. (Hmm, Im starting to lose myself, Im not sure if that last bit makes sense) --BradAppleton
It does make sense ... I am flying at the same altitude you are ;-). Physically, I think components and component frameworks can be identical, however IndividualPackaging applies better to loosely-coupled components and GroupPackaging applies better to more strongly-coupled component frameworks. And I like Doug's "pluggable strategies" term -- it's the way I think about components that are plugged into component frameworks.
As an example, I think programmers find it easier to start with Visual Basic and a bunch of GUI components than starting out with a higher-level business framework for the reasons you mention above. It is easier for them to conceptually chunk at a finer level than they're required to if they're reusing a big horizontal (horizontal across the domain in question) business framework. However the drawback is that by escaping the initial learning curve, they only delay the pain until later, when they've got a juggernaut, complicated fat VB client that has too much business logic in it, and requirements keep popping up as they learn more about the domain in question as they code it.
If you follow the rules and organizational principles in Doug's articles, and you understand the domain very well and are working with a highly-skilled team of developers and architects, then you can abstract the programmer from many of the complexities of the domain's requirements. So reuse occurs at a much higher level of granularity, and there is an initial learning curve, but the ROI payoff can be a very high if the cost of the framework is far lower than giving programmers who may not be familiar with the domain the responsibility of doing it themselves.
Now above I'm focusing on component frameworks, where Doug was focusing more on SoftwareFrameworks? in general. I'm doing this because I believe, from the context of CBD, a component framework that is built as a business framework that provides the programmer with an abstract design solution they extend into the organization has and results in many patterns in the ComponentDesignPatterns language (I hope ;-).