• escray
    置顶
    2023-02-06 来自北京
    分层架构的代码框架看上去不错,不知道后面有没有实际项目的代码示例,show me code。 domain application adapter( driven < restful / web > / driving < persistence > ) common( framework / util ) 代码的分层是应该在一开始就按照领域模型来分 domain, application, adapter( driven < restful / web > / driving < persistence > ), common,并且填充不同的类型(对象);还是按照业务用例,逐步推进? 我觉的比较好的办法,可能是先建立框架,然后再按照用例逐步递增。 在分层结构变化表里面,提到了应用层和被动适配层的合并,或者应用层和主动适配层的合并,那么是不是有可能应用层和适配层合并起来呢? 对于课后题, 1. 其他的适配器,没有出来,后来看留言提示,知道有消息队列和定时任务调用 2. 同样没能想出来,主要是我之前觉得领域层依赖持久化层做数据持久化很自然。 没有想到 DDD 居然会直接指导代码的目录结构。 照抄了一份放在 github 上: https://github.com/escray/geektime/tree/master/DDD-hand-in-hand
    展开

    作者回复: 分层架构,可以先把大的包结构定下来,然后逐步往里填内容。动手实践很棒👍🏻

    
    2
  • leesper
    2022-12-31 来自广东
    思考题: 1. 跟输入输出具体技术有关的都算,那么命令行界面的访问(CLI)、消息队列服务、缓存服务这些的,都算适配器 2. 内层依赖外层,我记得徐昊老师的课上提了一嘴,问题出在持久化层上,领域层依赖持久化层进行数据持久化,这就变成了内层依赖外层。方法就是“依赖倒置”原则,让领域层依赖于抽象的Repository,然后把真正的实现细节放到持久化层,这样只要接口不发生变化,实现怎么变都可以。这就叫“高层接口不依赖于底层接口,二者都应该依赖于抽象;细节依赖于抽象,而抽象不依赖于细节”。

    作者回复: 两个问题都回答的挺到位 👍🏻

    
    8
  • zcc
    2022-12-25 来自广东
    问题1:常见的还有MQ消息的订阅与发送 问题2:应该是主动适配器层会破坏依赖原则

    作者回复: 非常棒

    共 3 条评论
    5
  • Michael
    2022-12-24 来自广东
    问题2. 领域层依赖持久化层做数据持久化?

    作者回复: 是的👍🏻

    共 5 条评论
    4
  • Jaising
    2023-01-17 来自浙江
    继续第四篇两千字笔记《分离关注点构建领域核心——领域驱动设计中的分层架构》: 领域驱动设计中分层架构与六边形架构结合的最大魅力是保持了领域模型作为核心的稳定性,核心思想是分离关注点,设计原则是依赖倒置,从而使得不依赖用户交互与持久化机制的领域模型独立演进成为可能 https://juejin.cn/post/7188700862955388987

    作者回复: 总结得很好。继续点赞收藏转发 :)

    
    3
  • Geek_1e04e7
    2022-12-26 来自广东
    问题2:领域层会依赖持久化层,能想到的方法是将持久化相关的接口抽象定义放在领域层保持稳定。就不会破坏关系。

    作者回复: 没错

    
    3
  • 请叫我和尚
    2023-01-04 来自广东
    1. 这里尝试理解了 DDD 的分层架构和目前比较大众的开发模式的关系,麻烦看看是否理解有偏差 2. 领域层对应实体,领域层里面的逻辑处理是把以前的 Service 层的逻辑封装到了实体里,这里应该就是后面要讲的“贫血”&“充血”对比 3. 应用层对应以前的 Service 层,但是又有区别就在于,是把领域层的逻辑进行组装形成的逻辑,以前的 Service 层是直接硬写逻辑 4. 适配器层这个就很好理解了,被动就是以前的 Controller 层等等,主动就是对 DB、Redis的操作封装类。 5. 所以关键点区别就在于领域层的设计

    作者回复: 没毛病 👍🏻

    
    2
  • 赵晏龙
    2022-12-31 来自广东
    针对数据流入流出的途径,抽象为Driven/Driving,这很Impressive,好像从来没有做过这方面的思考

    作者回复: 我当初学六边形架构的时候,也有同感。

    
    2
  • Peter Yu
    2023-05-18 来自浙江
    我感觉controller层是被外界调用的,叫被驱动层才对吧(driven);而repository层是由领域层主动调用的,归到驱动层(driving)更加合理

    作者回复: 这取决于你从那个角度看。目前这种说法,来自于六边形架构最初的说法。

    
    1
  • RED_Allen_Account
    2023-02-11 来自上海
    1.常用的适配器还有MQ和定时任务 2.在domain和repository之间会破坏层间依赖,一般在domain层中加入gateway的概念,使用DIP反转domain和repository的依赖关系

    作者回复: 嗯,没错

    
    1