微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

域驱动设计 – 如何避免贫血域层,仍然有丰富的验证和业务规则

如果您有一个域对象,并且您希望对该域对象的责任做一些有用和中心的事情,如确保其有效,则有时需要访问相关对象的状态才能执行此验证.

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

我一直放松的东西,并允许从域访问到使用DI的存储库.我没有看到如何在复杂的应用程序中拥有一个“纯粹的”域层的清晰示例,这个层不是贫血的,并且有一个服务/应用程序层做所有的咕噜声,弄乱了域对象的内部.

解决方法

>如果对象是一个值对象,它就是
应该是不变的和验证的
施工期间
>如果对象
一个根集合,它的
自己的国家足以告诉你
如果有效,您可以添加
一种验证方法,其中
通过聚合级联.
最后,我认为这是你的主要
关心,如果你需要访问
几个相关的对象(即
不在同一个集合)确保
其中一个是有效的,你
最终需要驱逐出来
特定验证服务中的逻辑.

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

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

原文地址:https://www.jb51.cc/html/229257.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐