领域建模的过程,是模型驱动设计的过程,也是迭代建模的过程。
不可妄求一蹴而就能获得完整的领域模型,也不可殚精竭虑地追求领域模型的尽善尽美。领域建模的分析、设计和实现是循序渐进的增量建模,建模目标与侧重点也不尽相同。
领域分析模型负责捕捉表示领域知识的领域概念,明确它们之间的关系,形成反映现实世界的对象概念图。获得的分析模型全面而粗疏,既不至于遗漏重要的领域概念导致模型的缺失,又不至于锱铢必较地因为过分定义领域属性而陷入分析瘫痪。
领域设计模型在领域分析模型的基础上加入对设计和实现的思考,为对象概念图戴上聚合的镣铐,在保证概念完整性、独立性、不变量与一致性的基础上,更好地管理对象的生命周期。服务驱动设计则赋予了领域模型以动能,在对业务服务进行任务分解的基础上,由外自内由各种角色构造型参与协作,形成了连续执行的消息链条,驱动出远程服务、应用服务、领域服务、聚合和各种端口的方法,既验证了领域模型对象的正确性与完整性,又丰富了领域模型的内容。
领域实现模型基于服务驱动设计输出的任务列表和序列图脚本开展测试驱动开发,领域层的产品代码与测试代码共同构成领域实现模型。由于拥有单元测试的保护,及时重构又改进了代码的质量,使得领域实现模型变得整洁而稳定,形成具有运行能力的核心领域资产。在实现领域模型时,也是对领域设计模型和领域分析模型的一次验证。
聚合是领域建模阶段的基本设计单元。
领域分析模型向领域设计模型的演进是通过识别聚合完成的,聚合边界的约束能力使得领域设计模型在保证细粒度对象定义的同时,又能通过封装实体与值对象的细节简化对象模型,降低领域模型的复杂度。一旦确定了聚合,就可以由此定义资源库端口和领域服务,并按照信息专家模式将体现领域逻辑的原子任务分配给聚合,建立富领域模型。聚合是纯粹的,它不依赖于任何访问外部资源的端口,因此它也是稳定的;因为聚合是稳定的,使得围绕着它为核心建立的领域模型也变得更加稳定。