domain-driven-design - 加载 List 或 DropdownList 中的 Value 对象,DDD

标签 domain-driven-design ddd-repositories

我需要澄清一些事情。

有人员聚合,2 个 VO(国家,州省)。

我想在我的表示层中加载所有国家(我正在使用 mvc)

Evan 说您只使用存储库 (IPersonRepository) 来处理根实体(它应该始终只返回对聚合根的引用)

   public interface IPersonRepository()
   {
     void savePerson(Person p);
     void removePerson(Person p);
     Ilist<Person> getPerson();
   }

我通常会做什么来解决这个问题:

在 IPersonRepository 中添加这个方法
IList<Country> LookupCountrysOfPerson();

在 Infra 层实现域接口(interface),如下所示:
public IList<Person> LookupCountrysOfPerson()
{
    return Session.CreateQuery("from Countrys").List<Person>());
}

我的搭档说我错了。

有时你必须牺牲你的领域模型来完成一些任务

做这个的最好方式是什么?

请用代码! :)

最佳答案

我会说你不太可能需要国家成为一个实体。我怀疑国家只不过是引用数据,就像一个人的头衔一样。您的域中是否存在与国家/地区相关的行为?我怀疑这只是印在字母/信封上的东西。

这个问题有点类似于我不久前回答的这个问题:

Simple aggregate root and repository question

我的建议是您实现一个查找服务,您的客户可以使用该服务并缓存该服务。忽略 DDD 的规则以及与聚合或存储库有关的任何事情。正如其他人所提到的,这就是 CQRS 的意识形态发挥作用的地方。客户端不必通过域来获取数据。该域纯粹是事务性的,不是为查询而设计的。

本文解释了如何为通常在 UI 中填充下拉列表的事物(即标题、国家等)构建一个通用查找服务以获取引用数据

http://wtfperminute.blogspot.com/2011/02/working-with-reference-data-lookups.html

关于domain-driven-design - 加载 List 或 DropdownList 中的 Value 对象,DDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5478253/

相关文章:

design-patterns - DDD 选择聚合根

c# - DDD : one-to-many relationship between user aggregate root and almost all entities in other aggregates

domain-driven-design - DDD - 领域模型问题

datatable - 对于搜索/报告数据表或 DTO 或域类,您更喜欢哪一个?

database-design - 使用 Natural key 作为 DomainObject 的 ID 或 GUID + 自增域驱动设计

domain-driven-design - 如何有效地将 SQLAlchemy 与多个 DDD 存储库一起使用?

dependency-injection - 具有太多存储库的域服务

rest - 聚合根在 REST API (DDD) 中的作用

domain-driven-design - 事件和命令消息中的元数据

java - DDD - 存储库和多对多关系