DDD获取根目录

时间:2013-09-09 02:08:13

标签: domain-driven-design

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

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

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

编辑:

思考和阅读更多,是否适合直接使用应用程序层中的存储库来处理实体的提取?

2 个答案:

答案 0 :(得分:0)

我通常使用一个简单的查询图层,该图层为集合返回DataTable,为1个项目返回DataRow。对于更有条理的东西,我会使用DTO。因此,您的所有GetByXXX方法都可以位于查询图层中。

答案 1 :(得分:0)

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

var entity = repository.Get(id);
entity.ChangeSomeState();
repository.Save(entity);

在这种情况下,Get返回准备好进行修改的聚合(例如,如果使用EF或NHibernate中的会话,则附加到上下文)。这里的重点是一致性

现在,对于查询而言,最好使用Query类,该类将支持只读方案并侧重于性能

您所有的GetByXXX将位于Query类中。您甚至可以创建专门的查询类,例如一个用于管理员查询,另一个用于客户查询,依此类推。

有关其他信息,请查看以下文章:

Command and Query Responsibility Segregation (CQRS) pattern

CQRS with MediatR in ASP.NET Core 3.1 – Ultimate Guide