Frameworks generate metamodels

From what has been explained up until now it is clear that when building an application framework we are generalizing across a set of systems that usually belong to a particular domain. We aim at offering the tools and the conceptual infrastructure needed to implement all those systems. A framework is not just about reuse of code but also about conceptual reuse. A well designed framework should present a precise model of computation and conceptual basis.

This ``conceptual framework'' is in fact a metamodel that can be instantiated as a model to implement a desired application or domain service.

In [Meequel et al., 1997] the authors explain a method for designing a framework. The method is based on a domain analysis. Although they recognize that the framework development process is iterative by nature, their method proposes the following phases for framework design:

  1. domain analysis: analyze products in the domain, commonalities and variations.
  2. architecture: high-level partitioning of the software system into component.
  3. subsystem/component design
It is our belief that this traditional view of ``analysis-first'' process models is seldom appropriate for framework design (some authors argue that this approach is not appropriate for any kind of software design process). When designing a framework it is obvious that some initial domain analysis must be performed in order to understand basic requirements and different viewpoints represented by different stakeholders. But we cannot aim at understanding and modeling the whole domain from the start, it is important to remember that when building a framework we are not only implementing an infrastructure for existing applications but also thinking about future development in the domain.

We believe in an application-driven approach as that presented by [Johnson, 1993] in which the framework development process is iterative and where the user feedback is necessary on a regular basis. Such a process model has proven useful in our case. Not only is not necessary to have a previous domain analysis model before starting the framework design, it is the framework design that ends up generating an appropriate domain metamodel. Therefore, and already commented in section 1.2.4, frameworks generate metamodels.