作者回复: 你们用的是RPC方式是吧。可以把DTO作为单独一个包,让API接口和应用服务都依赖这个DTO包,这样就不违反层间依赖了。
作者回复: 可以在应用层保存一个一致的dto,在适配器有另外多个不同版本的dto作为适配
作者回复: 两个问题回答都不错。 关于DTO是否一定要放到应用层的问题,是不一定的。DDD最强调的是领域层要整明白,其他层都好商量。Eric Evans在自己的github例子里就是把DTO放在展现层的。不过还是不建议违反层间依赖原则。这个课程里把DTO放到应用层,是更强调六边形架构的思路。
作者回复: 这样也可以,其实Evans本人写的代码例子就是这么做的(在Github上搜 dddsample)。我们的课程里之所以这么做,是参考了六边形架构,在六边形架构中,适配器主要适配输入输出的技术关注点,而DTO和领域对象的转换已经不是这个意义上的技术关注点了。所以如果追求纯粹一点的六边形架构,那么就按课程里的,否则,你们现在的做法也可以。
作者回复: 继续努力
作者回复: 1,用@repository @autowired spring自动会注入 2,分层架构一般只规定方向对就可以了,没说不能跨层
作者回复: 如果关注的是整个企业的人和系统的交互,就是业务用例;如果关注的是人和单个系统的交互,就是系统用例。和app层直接相关的是系统用例。不过“app层只负责业务流程的编排”这句话本身过于笼统,含义不明。准确的说,app向外部提供的一个API对应与用例中的一个步骤。
作者回复: 简单回答:偏面向过程(我用“面向过程”代替“贫血”的说法)。详细回答:在领域对象不直接或间接访问数据库的情况下,尽量面向对象(我用“面向对象”代替“贫血”的说法),在纯粹的面向对象和纯粹面向过程之间取得一个平衡。
作者回复: 1 首先让模型轻量一点,其次要完善开发流程,在需求梳理,代码评审等环节检查 2 这些确实没放对,下节课聊
作者回复: repository 查出来的就是领域对象了,不需要再封装。某些情况下要用DO的话,也是 repository 内部的实现,外面是看不到的。