专栏首页DDD再议DDD分层

再议DDD分层

之前整理过《DDD分层》[1] 以及《分层架构》[2]

最近看网友讨论,整理一些有亮点的地方

现在分层架构+整洁架构似乎是个万金油组合了

之前DDD的标准分层结构:

右边传统分层,左边经过DIP改进型,两者有什么区别呢?

眼尖的人可以看出来,两者确实差了不少

线条1:application到infrastructure被反转了

线条2:这条线没有了,在MVC里面这线是常见的,applicaton与domain没分开,但DDD中这条线是不推荐的,就算在松散分层架构中也一般不使用,除非简单的CRUD项目

线条3:也被反转了,这其实类似CQRS中的Q部分


以上来源于群友的讨论,真的是世上无难事,只怕有心人;这点区别真没留意过

这图来源于阿里大牛殷浩之手,《阿里DDD四弹》[3]中进行过总结,DTOAssembler放在了application层,有些不太合理

在《分层架构》中thrift的TService,为了不与controller重复,所以需要一个application service,此时thrift与controller可以有相同的业务请求

也就是说controller对外有多种输入,但对应用层来说都是同一个user case,如果放在应用层内转化,是不是应该层为了同一个use case要爆露多过方法

适配层做三件事:

1.协议适配(如采用controller,通过 @RequestMapping 注解和 JSON 序列化)2.参数规则验证(如,不能为空、手机是数字并且11位、邮箱要有@之类简单验证)3.为调用下层(应用层)转化输入(assembler)

如果说分4层的话:

1.controller (assembler、转化)2.appliction3.domain4.repository(convertor、转化)

应用层是真正的业务入口,是很披的一层:

1.用来协调领域操作 这里一般看系统架构不一样会有所不同,主要再分为同步调用的方式,和步骤事件的方式。2.关注点分离的操作(如日志、通知等)

application service编排业务,domain service编排领域

References

[1] 《DDD分层》: http://www.zhuxingsheng.com/blog/ddd-layering.html [2] 《分层架构》: http://www.zhuxingsheng.com/blog/layered-architecture.html [3] 《阿里DDD四弹》: http://www.zhuxingsheng.com/blog/ali-ddd-four-bombs-to-read.html

本文分享自微信公众号 - 码农戏码(coder-game),作者:朱兴生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-01-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • DDD分层

    DDD中明确了repository概念,并属于domain层,但dao是对底层数据库的封装,具体实现类放在infrastructure层更合理

    码农戏码
  • 聊聊DDD的分层架构

    在《领域驱动设计——软件核心复杂性应对之道》一书中Eric Evans将应用架构分为以下层级:

    心平气和
  • 第二章、初识DDD

    理论上DDD可以指导所有业务系统的分析设计与开发。但从实践经验角度来讲,并不适合不加区分的在所有团队和业务系统建设时实施DDD,尤其是DDD推荐的CQRS架构,...

    yd
  • 为何我用DDD重构了才刚上线的新项目?

    很多人初次接触DDD会有些反感,特别是对DO、DTO、PO这些对象转来转去反感,也有人质疑这样做影响性能。

    Java艺术
  • 从DDD DSL DCI 说起

    软件行业隔一段时间大家就喜欢造一些名词,比如xx化,服务化,动态化,配置化等,你可以头脑风暴下,你可以搞出多少“化”来。比如最近火的都不是数据化,智能化了,而是...

    春哥大魔王
  • 领域驱动设计(DDD)实践之路(一)

    领域驱动设计(Domain Driven Design,DDD)其实并非新理论,大家可以看看 Eric Evans 编著的《领域驱动设计》原稿首版是2003年,...

    2020labs小助手
  • 笔者在实战DDD过程中遇到的问题与思考总结

    在实战DDD的过程中,我们编写最多的代码无疑就是DO(聚合根)转DTO(读模型)以及DO转PO(映射到数据库表)和PO转DO的转换器代码。百分之八十的BUG都来...

    Java艺术
  • 由参加领域驱动大会与自己所想的

    2017首届领域驱动技术大会一直是我非常期望的,要非常感谢右军赠送的门票能够让我领略大会风采。

    小程故事多
  • 如何学习领域驱动设计

    封面图:张子瞻的绘画,用丙烯颜料表达了蓝色的海、白色的波浪、棕黄色的沙滩以及墨绿色的树林。

    张逸
  • 【吐血推荐】领域驱动设计学习输出

    刚开始接触学习「DDD - 领域驱动」的时候,我被各种新颖的概念所吸引:「领域」、「领域驱动」、「子域」、「聚合」、「聚合根」、「值对象」、「通用语言」.......

    我没有三颗心脏
  • 领域驱动设计-什么是领域驱动设计和怎么使用它

    这篇文章讨论领域驱动设计(DDD),DDD是建立在面向对象分析设计上开发软件的一种方法。 通过这篇文章我们解释什么是领域驱动设计,在现代开发周期中如何实现,使用...

    用户7657330
  • DDD实现之路

    编者按:这篇文章最早撰写于2014年,作者也是《实现领域驱动设计》的译者。几年过去了,DDD在坊间依然方兴未艾,然而它的复杂性所引发的误解也层出不穷。对于一些基...

    ThoughtWorks
  • 【吐血推荐】领域驱动设计学习输出

    刚开始接触学习「DDD - 领域驱动」的时候,我被各种新颖的概念所吸引:「领域」、「领域驱动」、「子域」、「聚合」、「聚合根」、「值对象」、「通用语言」…..总...

    Java团长
  • 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念

        DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了。自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的...

    Zachary_ZF
  • DDD领域驱动的三种分层架构

    来源:https://www.jianshu.com/p/a775836c7e25

    JAVA日知录
  • 重新温习软件设计之路(5)

    本文是我学习课程《软件设计之美》的学习总结第五部分,记录对于DDD领域驱动设计方法的整体理解。

    Edison Zhou
  • 端口和适配器架构——DDD好帮手

    大概一个月前,在做2018年领域驱动设计大会预告的时候,上一届大会的主题演讲者肖然提出这样的担忧:工具和方法似乎没有很好地解决“落地难”的挑战。

    ThoughtWorks
  • 深度解析DDD中台和微服务设计

    导读:本文来源于 2020 年第四届 DDD 中国峰会主题演讲:《当中台遇上 DDD,如何设计微服务》。DDD 非常强调统一语言,而 DDD、中台与微服务产生于...

    华章科技
  • DDD领域驱动设计理论篇 - 学习笔记

      在加入X公司后,开始了ASP.NET Core+Docker+Linux的技术实践,也开始了微服务架构的实践。在微服务的学习中,有一本微软官方出品的《.NE...

    Edison Zhou

扫码关注云+社区

领取腾讯云代金券