当前位置:  开发笔记 > 编程语言 > 正文

如何避免贫血的域层,仍然具有丰富的验证和业务规则

如何解决《如何避免贫血的域层,仍然具有丰富的验证和业务规则》经验,为你挑选了1个好方法。

如果您有一个域对象,并且您想要做一些有用的事情并且对该域对象负责,例如确保它是有效的,那么您有时需要访问相关对象的状态才能执行此验证.

如何避免需要调用存储库或数据访问层的域对象?由于性能的原因,即使使用延迟加载,也无法始终遍历集合关系,并且您经常希望在域对象中执行查询.您可以依赖注入存储库实现到域中,但不是真正纯粹的并且使测试复杂化.

我总是放松一些东西,并允许使用DI从域访问存储库.我没有看到如何在复杂的应用程序中拥有一个"纯"域层的明显例子,这个层也不是贫血的,并且有一个服务/应用层执行所有的咕噜声和弄乱应该是域对象的内部.



1> Romain Verdi..:

如果对象是值对象,则它在构造期间应该是不可变的并且是有效的.

如果对象是根聚合,并且其自身状态足以告诉您它是否有效,则可以在其上添加验证方法,该方法通过聚合进行级联.

最后,我认为这是您的主要关注点,如果您需要访问多个相关对象(不在同一聚合中)以确保其中一个对象有效,那么您最终需要在特定验证服务中逐出此逻辑.

我真的认为将服务和存储库注入实体并不是最佳选择.创建专用服务似乎更合适,我不明白为什么它会导致你有贫血的域对象.

简而言之,如果您可以在不依赖服务或存储库的情况下验证对象状态,那么让对象在聚合根级别处理它.当您需要查询服务或存储库时,或者当您需要其他实体时,请强烈考虑将此逻辑移到对象之外.

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有