领域驱动设计(Domain-Driven Design)简称DDD。
DDD是什么?
DDD是由 Eric Evans 提出的,综合软件系统分析和设计的面向对象建模方法。如今已经发展成为了一种针对大型复杂系统的领域建模与分析方法。
DDD是针对软件开发领域的一种系统与理论分析方法,是一种方法论。
yuzixian:因为DDD提供的是解决问题的思路和方法,而不是如何去解决问题的实际操作,例如玩游戏,DDD提供的是赢得胜利的方法,而具体如何去实现就是技术,所以DDD是一种编程思想,而不是某种技术。
DDD和已有方法的区别是什么?
传统方法:
是针对数据库建模,是关系型数据库理论的延续,关注数据表和数据表之间的关系,是面向技术建模。
DDD:
将业务概念和规则转变为软件系统中的类型及其属性和行为
合理利用面向对象的封装、继承、多态等设计要素
降低或隐藏系统的业务复杂度
提升系统扩展性
yuzixian:传统的开发是面对数据库表,先设计表结构,再研究表与表之间的关联。DDD开发是先理解业务,再理解页面,再通过页面来构想代码中的业务流程,以此来设计数据库表。
DDD相关概念
领域(Domain):
现实世界中,领域包含了问题域和解系统。一般认为软件是对现实世界的部分模拟。在DDD中,解系统可以映射为一个个限界上下文,限界上下文就是软件对于问题域的一个特定的、有限的解决方案。
界限上下文(Bounded Context):
一个由显示边界限定的特定职责。领域模型便存在于这个边界之内。在边界内,每一个模型概念,包括它的属性和操作,都具有特殊的含义。
限界上下文之间的映射关系
合作关系(Partnership):两个上下文紧密合作的关系,一荣俱荣,一损俱损。
共享内核(Shared Kernel):两个上下文依赖部分共享的模型。
客户方-供应方开发(Customer-Supplier Development):上下文之间有组织的上下游依赖。
遵奉者(Conformist):下游上下文只能盲目依赖上游上下文。
防腐层(Anticorruption Layer):一个上下文通过一些适配和转换与另一个上下文交互。亦称适配层。在一个上下文中,有时需要对外部上下文进行访问,通常会引入防腐层的概念来对外部上下文的访问进行一次转义。
开放主机服务(Open Host Service):定义一种协议来让其他上下文来对本上下文进行访问。
发布语言(Published Language):通常与OHS一起使用,用于定义开放主机的协议。
大泥球(Big Ball of Mud):混杂在一起的上下文关系,边界不清晰。
另谋他路(SeparateWay):两个完全没有任何联系的上下文。