首页 > 其他分享 >我理解的DDD

我理解的DDD

时间:2023-01-18 11:33:34浏览次数:46  
标签:DTO 接口 Entity 理解 https zhihu DDD

参考资料

阿里的五篇DDD分享:

https://zhuanlan.zhihu.com/p/340911587 https://zhuanlan.zhihu.com/p/343388831 https://zhuanlan.zhihu.com/p/348706530 https://zhuanlan.zhihu.com/p/356518017 https://zhuanlan.zhihu.com/p/366395817   kratos v2的DDD实践: https://go-kratos.dev/blog/go-project-layout/  
 

首先是学习DDD要分别学习什么东西

  1. 六边形架构
  2. DDD角度的业务架构图
  3. DP
  4. DTO
  5. DO
  6. PO
  7. Domain Service
  8. 防腐层
  9. Repository
  10. use case
  11. Entity ,
  12. Assembler
  13. Converter
  14. Value Object
  15. Command、Query、Event对象
  16. 聚合根
  17. 上下文界限

 

下面逐步解释:

 


首先从高层角度来说

就是学习 六边形架构  (参见 阿里技术专家详解DDD系列 第二讲 - 应用架构 - 知乎) 就是 核心是domain layer, 再外面是Application  layer, 再外面是Infrastructure Layer   按照理论内部业务可以快速迭代,反而是外部Infrastructure Layer是稳定的 这就打破了之前架构设计的上下分层的结构

然后就是各种小概念

   
DP   跳过,先忽略  
DTO,data transfer object 就是http grpc的resp就是DTO  
DO,domain object 就是数据表的直观映射, 每个属性对应数据表的一个列  
Entity,实体   就是具体的业务逻辑类  
PO   好像也是持久化对象 也是数据表的直观映射   先忽略这个东西,跳过  
Repository 就是对db操作的抽象接口 不依赖db层具体的实现   就是一个接口,不是一个类 接口中的各个方法都是对业务的操作,而且是save 、find 这种按业务语义来命名的方法,不是create,update这种按db操作命名的方法
Repository实现类     具体负责操作db,sql操作写在这里  
防腐层Anti-Corruption Layer,ACL   和Repository 类似的,就是对调用外部的抽象接口 也是不依赖具体的实现,而是依赖接口    
防腐层ACL实现类   具体调外部接口,将外部接口返回值,转为一个我们自己定义的DTO来自己内部使用 然后返回给调用者     DTO这里注意, 不仅仅是我们服务的resp是DTO 外部服务的resp,我们也做一层转化,转为DTO     (领域层内使用DTO吗,不用entiyi吗)
use case 就是一个use case类,类下面的各个方法都是具体的业务方法,完成业务逻辑   这么算来use case类型也在领域层
Assembler   就是指Entity到DTO的转化器 有一个类专门的类来做个转化   同时注意一般没有DTO到Entity的转化器,一般不需要这么转化
Converter 就有个类专门复制转化   就是Entity到DO的转化器,也是DO到Entity的转化器
Value Object   先忽略  
Command、Query、Event对象   具体解释在这里 阿里技术专家详解DDD系列 第五讲:聊聊如何避免写流水账代码 - 知乎         就是app service的传参 就是领域层接收的参数
聚合根   TODO
上下文界限   TODO

 

画图理解:   DTO,entity,DO的转化的图:       DDD角度的业务架构图:       代码理解: TODO:我的kratos helloworld github代码
没有完全按照理论 注意具体实践过程中还有所取舍


DDD优点缺点

1 结构清晰 实践软件设计原则 单一原则 依赖倒置原则   (话说其实不用DDD,也可以这么实践) 2   缺点是带来了大量的代码膨胀 引入了一些复杂性 比如聚合根的repo操作,可能有些entity不修改,有些entity修改
我知道这个写的很粗糙

标签:DTO,接口,Entity,理解,https,zhihu,DDD
From: https://www.cnblogs.com/dong-qi/p/17059436.html

相关文章

  • 初步理解:jvm运行机制,java程序运行机制,堆栈详解,jvm调优的目的。
    谷咕咕最近在准备面试,本来想多看看堆和栈的关系,看看发现又设计到gc(GarbageCollection)垃圾回收机制,发现盲区太多了,就去粗略的学习了一下jvm(java虚拟机),发现之前只会写程序,底......
  • 谈谈对数据库中索引的理解
    索引的作用:因为数据的记录很多,为了方便查找,提高查询的效率。索引是对数据库表中一个或多个列的值进行排序的数据结构,以协助快速查询、更新数据库表中数据。索引的原理:把要......
  • 如何理解面向对象程序设计OOP
    基本概念面向对象是对具体问题的抽象,将需求按照特点,功能划分将共性封装成一个对象,面向对象具有封装、继承、多态的特性。什么是对象对象是该事务的具体表现形式,具体的个体。......
  • 如何理解 logrotate 实用工具?请收下这份保姆级教程
    当你想对一个应用程序跟踪使用状况或者进行故障排除的时候,日志是十分有用的。然而,随着越来越多的信息被记录,日志文件占据的硬盘空间也会越来越大。久而久之,一个日志文件能变......
  • Oracle表空间的理解和使用
      SQLServer数据库与Oracle数据库之间最大的区别要属表空间设计。Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献。可以这......
  • 线性变换的理解
    转自知乎用户,人来狗往......
  • effective modern c++ - 1 理解模板类别推导
    模板中的行参类型推断会省略引用在这两种模板中,行参的引用都会在推断过程中被省略template<typenameT>//templateAvoidf(T&param);template<typenameT>//temp......
  • 个人对于 ECS 的理解
    前言在游戏引擎中,游戏对象的状态更新基本是由组件的生命周期来实现,比如在update中更新位置但如果需要更新的游戏对象越多,各自处理自己的状态更新就会让游戏维护变的困......
  • 个人理解八皇后问题
    程序源文件下载地址在文章后面。---------------------------------------------------------------------八皇后问题,网上的解法很多,在此我说一下自己的理解,权当是学习笔记......
  • DDD落地02 聚合 值对象
    13更深刻地理解领域知识  捕获行为需求和事件风暴  ​  箭头上的文字表示关系的含义。箭头的方向代表的是读这些文字的方向。比如说,“用例分析”指向“捕获行为需......