如果您有一个域对象,并且您希望对该域对象的责任做一些有用和中心的事情,如确保其有效,则有时需要访问相关对象的状态才能执行此验证.
如何避免域对象需要调用到存储库或数据访问层?即使使用延迟加载,由于性能,您也不能总是走集合关系,并且您经常希望在域对象中执行查询.您可以将依赖注入资源库实现到域中,但不是真正纯粹的并且使测试复杂化.
我一直放松的东西,并允许从域访问到使用DI的存储库.我没有看到如何在复杂的应用程序中拥有一个“纯粹的”域层的清晰示例,这个层不是贫血的,并且有一个服务/应用程序层做所有的咕噜声,弄乱了域对象的内部.
解决方法
>如果对象是一个值对象,它就是
应该是不变的和验证的
施工期间
>如果对象
是一个根集合,它的
自己的国家足以告诉你
如果有效,您可以添加
一种验证方法,其中
通过聚合级联.
最后,我认为这是你的主要
关心,如果你需要访问
几个相关的对象(即
不在同一个集合)确保
其中一个是有效的,你
最终需要驱逐出来
特定验证服务中的逻辑.
应该是不变的和验证的
施工期间
>如果对象
是一个根集合,它的
自己的国家足以告诉你
如果有效,您可以添加
一种验证方法,其中
通过聚合级联.
最后,我认为这是你的主要
关心,如果你需要访问
几个相关的对象(即
不在同一个集合)确保
其中一个是有效的,你
最终需要驱逐出来
特定验证服务中的逻辑.
我认为将服务和存储库注入实体不是最佳选择.创建专用服务似乎更合适,我不明白为什么会导致您有贫血域对象.
简而言之,如果您可以在不依赖服务或存储库的情况下验证对象状态,请让对象在聚合根级别处理它.当您需要查询服务或存储库时,或者当您需要其他实体时,强烈地考虑将该逻辑移到对象之外.