一、概念

领域驱动设计全称为(Domain-Driven Design,简称DDD),是为了解决复杂的软件设计的一种设计思想。

二、与OOP 的区别

DDD是一套基于对象思维的业务建模设计思想,在业务分析阶段就用上的一种方法。

OOP是一套面向对象编程思想,采用基于对象实体的概念建立模型,模拟客观世界分析,设计,实现分析的思维。

DDD将边界扩大到一个领域,一个领域可能包含多个对象。而OOP 的边界是对象。也就是说DDD是比OOP更加上层的一一种设计方式,DDD 是一个大盒子,里面装的都是OOP小盒子。DDD没有具体的代码实现,代码实现全部交由OOP来实现。它们并不冲突,只是业务分析层面上的不同。

三、什么是领域

领域:要完成一系列共同目标和业务的的对象的集合。领域就是问题域,用来解决某个特定问题。举个例子:支付订单的时候,我们用到一张用户信息表,一张地址表(电商网站有多个地址),一张银行卡表(电商网站多个银行卡)。那么这个时候这三张表就需要完成订单Order 的信息和支付的操作。那么这些东西就可以抽象成一个领域。他们都完成了共同的一个功能。这个领域包含User,Address,BankCard三个对象吧。

四、DDD实现的几个问题       

why:为了应对软件的核心复杂性,降低沟通成本。实现业务的价值

when:当遇到复杂的,不熟悉的业务场景

what:以领域为核心,贯穿需求,设计,开发,实现业务功能的拆分。

how:业务最终如何的实现方案。

五、领域的划分

领域可以根据一个项目,一个模块,一个业务 等进行划分,领域由需求分进行主导分析,对需求进行拆分建模,在交流中达成都能理解的建模语言。比如登录可以当做一个模块。

在传统的DDD四层架构中,DDD划分出了领域层、仓储层、基础设施层、接口层;

  • 领域层:存放业务逻辑的关注点,即所谓的领域行为。
  • 应用层:DDD暴露出了 业务用例级别 (Use Case)的服务接口,粘合业务逻辑与技术实现。
  • 基础设施层中:DDD集中放置了支撑业务逻辑的技术实现。
  • 仓储层:DDD放置了和领域状态相关的逻辑,打通了领域状态持久化与存储设施之间的联系。。

六、领域建模模式

实体:实体以身份标识作为唯一凭证,沿着时间轴,记录了实体所有变更事件。一旦产品被生成好,其唯一身份就不会发生变化,但是其描述信息、价格等可以被多次修改。

值对象:值对象会当做不变对象来设计,在完成创建后,其状态就不能改变了。

领域服务:领域服务封装了不能自然建模为值对象和实体的逻辑、流程和概念。它本身不具有身份和状态。它的职责是使用实体和值对象编排业务逻辑。

模块:模块主要用于组织和封装相关概念(实体、值对象、领域服务、领域事件等),作用于单个领域,用于分解模型规模、

七、DDD 架构与三层的架构区别

领域驱动java 领域驱动设计DDD的作用_领域驱动java