''Here are some pointers to articles that claim to give a concise definition of the term "framework:"'' * from RalphJohnson: http://st-www.cs.uiuc.edu/users/johnson/frameworks.html * from BradAppleton: http://www.cmcrossroads.com/bradapp/docs/patterns-intro.html * from ComponentFrameworkDefinition (see also SoftwareFramework, ComponentFramework and ComponentDefinition) * from ShaiBenYehuda: http://st-www.cs.uiuc.edu/users/hanmer/PLoP-97/Proceedings/shai.pdf. The pattern language is based on a different perspective, regarding frameworks as a tool for developers. ---- There are different kinds of frameworks. Consider... * WhiteBoxFramework (where you can see the code in the framework) * BlackBoxFramework (where you cannot see the code in the framework) ---- It is important to distinguish between ''frameworks'' and ''libraries''. Frameworks impose a definite structure on the code that uses them, whereas libraries do not. Examples of frameworks are EnterpriseJavaBeans and most GUI systems (where you have to implement an event-handling function or interface with a specific signature in order to receive events). Examples of libraries include Java's collections library and most network libraries (which descend conceptually from UNIX sockets). There are also gray areas; an example would be the StandardTemplateLibrary, which both provides reusable components and defines interfaces for extensions (like functions and stuff). ''Any non-trivial library dictates a structure by its nature because it will involve a state machine that must be followed.'' I don't accept that this dictates a structure. What structure is dictated by the Java collections library, or is that trivial? How do you define 'trivial'? -- TomAnderson ''For example, mutating a collection in one thread and iterating over it in another results in the iterator throwing ConcurrentModificationException. A different collection implementation might specify that modifications "behind" the iterator are not observed by it while those "ahead" are, or that the iterator always sees the collection as it existed when the iterator was created. Trivial? Could be.'' ---- I believe that the term Framework should be defined, not just in ambiguous language or with blurred edges but with a defined model, interface and structure. The basic framework of a Framework is CoalescentPatterns (or 'C'omposite (GoF)), but which kind of patterns, and how can they relate? I am pattern mining and attempting to create the smallest Framework, which effectively becomes a basic definition. Perhaps a failed task before it begins, but perhaps something interesting can come from the experience. A Framework is more than an API or Service, as it tends to be Stateless. A Library can be thought of as a collection of functions, not necessary having any kind of structure or architectural meaning, although it could. However what I believe is true, is a Framework should have the following traits. It should contain any kind of Factory Pattern, whether public or private. It should contain a base class, or interface, which uses any type of polymorphic Design Pattern. The Factory must be capable of instantiating and calling any customized, and configured concrete class (extension or pluggable object). This must be configurable in some form, albeit file, database, attributes or other. It must provide a basic 'function' in a Domain specific sense, whether that is horizontal or vertical in nature. Any Application that contains these minimum characteristics as a 'unit', as one CoalescentPattern, it can be said that it 'contains a Framework'. However, a true Framework can stand alone, and offer complete reuse. Now after this, we can decide what type of Framework it is, or will be, but before any next stages, it is of the 'Basic Framework Structure'. -- JonathanCrossland ---- Related: * FrameWork ---- CategoryFramework CategoryDefinition