设计原则 DDD领域

领域驱动设计(DDD)战术上一些实践

2020-11-12  本文已影响0人  hwholiday

个人能力有限,如有问题欢迎指导

程序设计谈不上什么最好,无论是面向过程编程,还是面向对象编程,我们都是在追求完美的道路上

不设计和过度设计都会对我们产生一些影响,最合适自己的设计才是最好的设计

DDD(Domain-Driven Design)领域驱动设计

要不要DDD

贫血模型 VS 充血模型

面向过程 VS 面向对象

需求把东西全部放到柜子你里面

实体

用于个性特征或区分不同对象,判断是不是同一个实体主要依据身份标识(identity),唯一身份标识和可变性(mutability)特征将实体对象和值对象(Value Object)区分开来。

值对象

值对象用于度量和描述事务,当我们只关心某个对象的属性时,该对象就可以作为一个值对象

聚合

将实体和值对象在一致性边界内组成聚合,不变性和一致性边界即是聚合的设计依据

领域服务

领域中的服务表示一个无状态的操作,它用于实现特定于某个领域的任务。当某个操作不适合放在聚合、值对象、实体上时,最好的方式便是使用领域服务

应用服务:获取输入,发送消息给领域层,监听确认消息
领域服务:协调账户模型和邮件进行交互,执行相应的领域行为。
基础服务:按照应用服务的指示发送邮件。

工厂

将创建复杂对象和聚合的职责分配给一个单独的对象,该对象本身并不承担领域模型中的职责,但是依然是领域设计的一部分。
工厂应该提供一个创建对象的接口,该接口封装了所有创建对象的复杂操作过程,同时,它并不需要客户去引用那个实际被创建的对象。对于聚合来说,我们应该一次性地创建整个聚合、并且确保它的不变条件得到满足

资源库

简单理解就是一个持久化机制,在DDD设计中一般将聚合实例放在资源库中

探讨项目结构 golang

- cmd  项目启动文件
- conf 配置文件
- internal
  - app 项目名称 
    - domain
     - dto        定义入参,出参
     - aggregate  聚合
     - valobj     值对象
     - entity     实体
     - dependency 抽象接口由外部 repository 实现
     - service    领域服务
    - facade     接口防腐层 调用其他接口
    - server     适配器
     - repository 依赖倒置实现储存服务
     - grpcAdapter grpc 适配器
     - httpAdapter http 适配器
- pkg 三方库工具类

上一篇 下一篇

猜你喜欢

热点阅读