二、领域驱动设计~战术篇

二、领域驱动设计~战术篇

1、前言

这篇文章主要关注的是领域驱动设计(DDD)代码设计实施上的一些设计概念和原则。

是从技术视角出发,侧重于领域模型的技术实现,完成软件开发和落地,包括:聚合根、实体、值对象、领域服务、应用服务和资源库等概念解释和代码逻辑的设计和实现。

战略篇请参考:一、领域驱动设计-战略篇

2、战术设计阶段:DDD 中的重要的一些概念

1)、实体

  • 有唯一标识符,就算其他所有属性完全相同,只要标识符不一致就是不同的实体,标识符一致就是同一个实体,我们把这样的对象称为实体。

2)、值对象

  • 没有唯一标识符,只要属性一致,就是同一个值对象
  • 值对象与实体区别如下图

img

3)、应用服务

  • 服务协调多个领域服务和聚合及对其他微服务调用

4)、领域服务

  • 无法划分到实体和应用服务的行为方法,比如跨多个实体的业务逻辑(类似于Service层的类)
  • 领域服务和上文中提到的应用服务是不同的,领域服务是领域模型的一部分,而应用服务不是。应用服务是领域服务的客户端,它将领域模型变成对外界可用的软件系统。

5)、领域事件

  • 用最终一致性取代了事务一致性,通过领域事件的方式达到各个组件之间的数据一致性
  • 领域事件的命名遵循英语中的“名词+动词过去分词”格式,即表示的是先前发生过的一件事情。比如,购买者提交商品订单之后发布 OrderCreated 事件,用户支付 TradePaid 事件

6)、聚合 & 聚合根

聚合

  • 聚合是业务和逻辑紧密关联的实体和值对象的组合
  • 跨多个实体的业务逻辑通过领域服务来实现,跨多个聚合的业务逻辑通过应用服务来实现
  • 聚合的特点:高内聚、低耦合,它是领域模型中最底层的边界,可以作为拆分微服务的最小单位

聚合根

  • 聚合根的特点:聚合根是实体,有实体的特点,具有全局唯一标识,有独立的生命周期
  • 一个聚合只有一个聚合根,所有外部对聚合的访问都要通过聚合根

img

7)、工厂

  • 工厂封装复杂实体的创建逻辑,都是对领域对象的生命周期进行管理.

8)、资源库

  • 资源库包括但不限于传统的 dao 接口(数据库/内存/redis缓存/其他资源)

9)、防腐层

  • 当你的领域和其他领域存在数据交互时,你需要一个防腐层作为两个领域之间的纽带。这会给你带来很多“数据转换”的代码,但是对于业务多变的系统来讲,它能保护你的领域,这是值得的。
  • 防腐层主要起到隔离的作用

img

10)、模块

  • 就是项目中的 package
  • 一个模块用于存放领域中内聚在一起的类,模块之间松耦合
  • 模块应该根据通用语言来命名,且应与领域概念保持协调一致
  • 同层模块之间,尽量杜绝循环依赖
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值