Model-driven Architecture (MDA) is the OMG´s view of model-driven development (see clarifying concepts: MBE vs MDE vs MDD vs MDA). According to the OMG, “a complete MDA application consists of a definitive PIM (platform-independent model), plus one or more PSMs (platform-specific models) and complete implementations, one on each platform that the application developer decides to support”.
The idea is to start first with a model of the system-to-be free from technical details, i.e. completely focused on reprseenting the domain structure and behaviour (the PIM level model/s), which is then translated by means of executing a model transformation into a set of platform-specific models (the PSM level model/s) describing how the PIM model should be implemented in a particular technology (e.g. by means of a profile that annotates the PIM concepts with technical information).
Conceptually, two key benefits are: 1 – domain experts can focus on the PIMs while platform experts can focus on the PSMs (and transformations) and 2 – the PIM can be reused to implement the same system in different technologies. In practice, I still have to find a single company that adheres to this two-level modeling. Tools / companies I’ve been in touch with either stick to the PIM level (and use a model interpreter / code-generator able to fill all technical details using predefined generation strategies to execute the model) or to the PSM level (and then use a simpler “compiler” that translates that model into the final implementation code).
Not saying they don´t exist at all but in my experience it looks like companies don’t feel the investment of creating both types of models pay off. Maybe because with the advent of the web there are not so many different platforms anymore, maybe because tools are powerful enough to generate code for different target languages directly from the PIM, maybe because for very specific platform domains the PIM part is not so important (or rather small) and all the complexity lies on the PSM aspects so the benefit of creating the PIM is not worthwhile (e.g. for mobile app development, many companies have a separate development team per platform since it’s more productive to create each version from scratch due the importance, and variety, of the technical aspects of each platform).
Do you have the same experience? Any idea why? If you know examples of companies adhering to the two-level modeling architecture can you give some context on how they use them?
P.S. One scenario where this duality makes sense is in reverse engineering process (e.g. see MoDisco) where you first create a “low-level” model of the legacy code (to avoid any initial information loss) and then you process it to create higher-level views of the software (depending on your objectives).