MDA allows you to model your problem domain to such a degree that the resulting model is executable without further elaboration. This is usually accomplished through action languages, where such a model can be translated into code with complete control of the generated output. In this scenario, we simply apply the mapping functions and generate the system, rather as we do today with code that we compile. Modelers use mapping functions to (re)create all of the target models from these primordial inputs, and additional inputs for the mapping functions may then appear only in the form of marks. However, it's not always possible to produce complete models, or the models may not meet all of the nonfunctional requirements of a software development process, such as a cultural need to see a "design" model. More commonly, there can be an impedance mismatch between the source modeling language and the target model that would cause a source model to have to contain elements at radically different levels of abstraction. We may find also that it's not appropriate to put everything in a single model and map it to the target in one step. Consequently, MDA provides for the capability of elaborating models. Model elaboration is the idea that a target model can be modified after it has been generated. Generally, this means adding code to the model, but it can also mean editing or refactoring the generated model in any manner you select. This possibility of target model elaboration is an advantage of the MDA framework because it allows developers to ease into model-driven development, rather than take a step function from a code-driven process to a model-driven development one. |