Domain driven design DDD获取根目录列表

Domain driven design DDD获取根目录列表,domain-driven-design,Domain Driven Design,因此,我有一个WCF服务,它接受命令并将它们映射到域服务层的调用。在向域写入命令类型时,这种模式几乎是完美的 我想知道的是,每个人都是如何阅读的,更具体地说,从模型中获取聚合列表以供显示。如前所述,我有一个WCF服务,它调用服务层。目前,我的服务中有一个方法返回聚合根的列表。不知怎么的,这感觉有点脏。我正在用GetByXXXX之类的方法污染我的域服务 我正在寻找一些关于通过应用程序服务层搜索和检索域对象的指导 编辑: 再想一想,在应用层中直接使用存储库来处理实体的获取是否合适?我通常使用一个简单

因此,我有一个WCF服务,它接受命令并将它们映射到域服务层的调用。在向域写入命令类型时,这种模式几乎是完美的

我想知道的是,每个人都是如何阅读的,更具体地说,从模型中获取聚合列表以供显示。如前所述,我有一个WCF服务,它调用服务层。目前,我的服务中有一个方法返回聚合根的列表。不知怎么的,这感觉有点脏。我正在用GetByXXXX之类的方法污染我的域服务

我正在寻找一些关于通过应用程序服务层搜索和检索域对象的指导

编辑:


再想一想,在应用层中直接使用存储库来处理实体的获取是否合适?

我通常使用一个简单的查询层,它为集合返回一个
数据表
,为一个项目返回一个
数据行
。对于更结构化的内容,我将使用DTO。因此,所有的
GetByXXX
方法都可以位于查询层。

存储库更适合支持更改状态的操作。即使是通过存储库获取聚合,这也是因为您打算更改状态并立即将其保留回来:

var entity=repository.Get(id);
entity.ChangeSomeState();
保存(实体);
在该场景中,
Get
返回准备修改的聚合(例如,如果使用EF,则附加到上下文,或者在NHibernate中附加会话)。这里的重点是一致性

现在,对于查询,最好使用一个查询类,它将支持只读方案,并关注性能

您所有的
GetByXXX
都将驻留在查询类中。您甚至可以创建专门的查询类,例如,一个用于管理查询,另一个用于客户查询,等等

有关更多信息,请查看以下文章:


我在应用程序层使用存储库。当涉及延迟加载内容时,需要完成一些分离工作。如果您有过多的特定查询方法,您可以定义一个criteria对象。是的,存储库是查找器方法的自然场所。无需构建另一层复杂性(应用程序->服务->存储库,而不是应用程序->存储库)。广泛使用的“松弛分层系统”模式允许使用相关层下的所有层。所以,您也可以在表示层中使用存储库。数据表太重,无法通过网络服务返回。它们包含数据库元数据。即使在没有网络服务的情况下使用数据表,它们也会将您与数据结构紧密地结合在一起。对于企业类型的应用程序来说,这是一件糟糕的事情。我的答案实际上与将您的
GetByXXX
移出存储库有关。使用WCF,您无论如何都会有数据契约,因此您需要在集成层进行一些映射。