0

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

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

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

编辑:

再思考和阅读,直接使用应用层的存储库来处理实体的获取是否合适?

4

2 回答 2

0

我通常使用一个简单的查询层,它返回一个DataTablefor collections 和一个DataRowfor 1 item。对于更结构化的东西,我会使用 DTO。所以你所有的GetByXXX方法都可以放在查询层中。

于 2013-09-09T04:20:00.567 回答
0

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

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

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

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

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

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

命令和查询职责分离 (CQRS) 模式

ASP.NET Core 3.1 中带有 MediatR 的 CQRS – 终极指南

于 2020-11-10T20:15:55.980 回答