首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >再议DDD分层

再议DDD分层

作者头像
码农戏码
发布2021-03-23 16:31:40
8830
发布2021-03-23 16:31:40
举报
文章被收录于专栏:DDDDDD

之前整理过《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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农戏码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • References
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档