Reducing accidental complexity in domain models
A fundamental principle in engineering, including software engineering, is to minimize the amount of accidental complexity which is introduced into engineering solutions due to mismatches between a problem and the technology used to represent the problem. As model-driven development moves to the center stage of software engineering, it is particularly important that this principle be applied to the technologies used to create and manipulate models, especially models that are intended to be free of solution decisions. At present, however, there is a significant mismatch between the "two level" modeling paradigm used to construct mainstream domain models and the conceptual information such models are required to represent-a mismatch that makes such models more complex than they need be. In this paper, we identify the precise nature of the mismatch, discuss a number of more or less satisfactory workarounds, and show how it can be avoided.
accidental complexity domain modeling modeling paradigm model quality modeling languages stereotypes powertypes deep instantiation