Agile MDA expects the construction of various PIMs using the same Executable UML profile throughout (see Chapter 9). The mappings merge models together using the same metamodel because each model conforms to that same profile. This reduces the problem of defining the mapping rules to a simpler and more general problem of defining mappings between model elements in the metamodel of the Executable UML profile for example, a state in one domain to an enumerated value of an attribute, or a signal in one domain to a signal in another.
Linking the models together then becomes a matter of indicating which of the elements in each model participate in the mapping. For example, (state) Overdrawn in the Bank might match up with (enumerated attribute value) Icon(47).color=Red in the UI, while (signal) Button(3) in the UI might match up with (signal) depositMoney to Account 454647 in the Bank domain.
By using a single profile, we avoid silos of transformations that perforce must know something about the structure of each different target metamodel. Any model, then, can be plugged into a design time bus, as suggested by Figure 10-1. This improves design-time interoperability, because all models are equal.
Figure 10-1. A design-time interoperability bus
Except one. The model compiler traverses a single combined repository that contains the merged information from other models, and then executes mapping rules to produce text, the most interesting and useful PSM of them all: code.