Even the core domain model usually has so much detail that communicating the big picture can be difficult.
When there is a lot of interaction between subdomains in separate modules, either many references will have to be created between modules, which defeats much of the value of the partitioning, or the interaction will have to be made indirect, which makes the model obscure.
Identify the most fundamental concepts in the model and factor them into distinct classes, abstract classes, or interfaces. Design this abstract model so that it expresses most of the interaction between significant components. Place this abstract overall model in its own modules, while the specialized, detailed implementation classes are left in their own modulesdefined by subdomain.
In a large system without any overarching principle that allows elements to be interpreted in terms of their role in patterns that span the whole design, <i>developers cannot see the forest for the trees.</i> We need to be able to understand the role of an individual part in the whole without delving into the details of the whole.
Devise a pattern of rules or roles and relationships that will span the entire system and that allows some understanding of each part's place in the whole—even without detailed knowledge of the part's responsibility.