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