Domain driven design 一个域对象';填充';由多个存储库

Domain driven design 一个域对象';填充';由多个存储库,domain-driven-design,repository-pattern,Domain Driven Design,Repository Pattern,我是DDD新手,需要明确一些概念,以便我可以将其应用到我的项目中 基本上,我有一个域对象“Customer”。CustomerRepository将通过引用DAL返回此域对象 问题是DAL无法提供“填充”客户域对象所需的所有信息。有关客户的一些信息将由其他外部资源获取,可能是其他存储库或外部web服务 也许我应该划分我的“客户”域对象。但如果我的业务逻辑不允许我这么做呢 另外,返回域对象是否只是存储库的责任?是的,它应该是存储库的责任 现在仓库很便宜。也许把数据翻一番可以解决你的问题?例如,如果

我是DDD新手,需要明确一些概念,以便我可以将其应用到我的项目中

基本上,我有一个域对象“Customer”。CustomerRepository将通过引用DAL返回此域对象

问题是DAL无法提供“填充”客户域对象所需的所有信息。有关客户的一些信息将由其他外部资源获取,可能是其他存储库或外部web服务

也许我应该划分我的“客户”域对象。但如果我的业务逻辑不允许我这么做呢


另外,返回域对象是否只是存储库的责任?

是的,它应该是存储库的责任

现在仓库很便宜。也许把数据翻一番可以解决你的问题?例如,如果customer.firstname来自数据源#1,但customer.lastname来自数据源#2,您可以确保在客户注册时customer.lastname存储在数据源#1中(+将更新已注册客户的过程)


另一件事-您的域模型不应该知道这个问题。你应该试着让它不知道技术问题。否则-您将最终失去隔离,并最终得到人工域对象,这些对象在那里编码只是为了让它运行。

是的,这应该是存储库的责任

现在仓库很便宜。也许把数据翻一番可以解决你的问题?例如,如果customer.firstname来自数据源#1,但customer.lastname来自数据源#2,您可以确保在客户注册时customer.lastname存储在数据源#1中(+将更新已注册客户的过程)


另一件事-您的域模型不应该知道这个问题。你应该试着让它不知道技术问题。否则,您将最终失去隔离,并最终得到人工域对象,这些对象在那里编码只是为了让它运行。

+1。不要损害您的域客户实体,否则您将在整个域模型中传播架构污染。保持模型的准确性是DDD的核心宗旨。存储库是处理问题的天然场所。它无法访问这两个存储位置的任何原因(即DAL+Web服务/任何东西)?@sfinie唯一的原因是-它可能在技术上很难,并且可能会严重影响性能。除此之外,没什么错。从域的其余部分的角度来看,我仍然支持保持域实体的完整性。您可能会看到回购的一些“延迟加载”类型的策略。然而,我会先从简单开始,只有当你发现你真的有性能问题时才会去那里。不要损害您的域客户实体,否则您将在整个域模型中传播架构污染。保持模型的准确性是DDD的核心宗旨。存储库是处理问题的天然场所。它无法访问这两个存储位置的任何原因(即DAL+Web服务/任何东西)?@sfinie唯一的原因是-它可能在技术上很难,并且可能会严重影响性能。除此之外,没什么错。从域的其余部分的角度来看,我仍然支持保持域实体的完整性。您可能会看到回购的一些“延迟加载”类型的策略。不过,我会先从简单开始,只有当你发现你真的遇到性能问题时才去那里。