This post originated from an RSS feed registered with .NET Buzz
by Jonathan Crossland.
Original Post: What exactly is a Framework
Feed Title: Jonathan Crossland Weblog
Feed URL: http://www.jonathancrossland.com/syndication.axd
Feed Description: Design, Frameworks, Patterns and Idioms
As dictionary definitions go, you will get something like this -
A scaffold
A skeletal structure
A structure for supporting or enclosing something else
A set of guidelines for an idea, system or method
According to the authors Gamma, Helm, Johnson and Vlissades [Design Patterns, Addison-Wesley, 1995] (which is one of the nicest I have seen)
A Framework is .....
A set of cooperating classes that makes up a reusable design for a
specific class of software. A framework provides architectural guidance
by partitioning the design into abstract classes and defining their
responsibilities and collaborations. A developer customizes the
framework to a particular application by subclassing and composing
instances of framework classes.
Seeing this quoted all over the place, I commonly see the phrase "reusable design for a specific class of software", misinterpreted.
Often it is taken to believe that it has to be for a "Business Domain".
If I had to reword it slightly.
A set of cooperating classes and architectural elements that make up a reusable design as a platform for building a software system.
One aspect in this definition which I hesitate about is the very OO centric talk of abstract classes.
Although, they are most definitely there within good frameworks as they exist today, one must believe that a framework could consist of Patterns that decorate and facade other components or
provide complete extensible behaviour through other means. Its not that it is preferred, but that it is possible.
Within the world of SOA, we must believe that we can create lightweight frameworks for Services, that do not rely heavily on OO.
Redefining this line slightly, I would say
A framework provides architectural and design guidance,
by establishing a set of collaborating interfaces that can be extended and configured to develop the surrounding software.
Then to incorporate Domain-centric frameworks, we could add a last sentence.
The entire newly worded definition would then be
A Framework is set of cooperating classes and architectural elements that make up a reusable design as a platform for building a software system.
A framework provides architectural and design guidance,
by establishing a set of collaborating interfaces that can be extended and configured to develop the surrounding software.
A Framework can be used as a whole or in part, and can be combined with other frameworks.
A Framework can further be divided into those concerned with software construction or the Business Domain.
I like the newer more 'generic' slant on the definition. What do you think?