2

我将使用 CQS(作为其设计的一个方面)开始一个新项目,但没有 CQRS + 事件溯源、事件流处理或历史建模。当我遇到这样一种情况时,我将有一大群人使用一小部分数据(并且不想阻止用户),我将实施事件溯源。这意味着(至少对我而言)我所做的只是从命令与查询的分离(关注点分离)开始。

我在命令端使用 EF ORM 和实际的 Schema。在查询方面,最好只使用视图(根据我正在阅读的内容),但我认为这种观点并不妨碍我使用 ORM(或不使用)和/或 Repo,或 ADO.NET + 存储过程,等等,作为从数据库访问这些视图的方法(我认为)。

这是我为大致说明我的想法而制作的图表(它绝不是全面的):

在此处输入图像描述

我的问题:

第 1 部分:我不知道从数据库中检索数据(来自a View) 并使用 ViewModels (DTO) 为客户端提供某种状态的新视图(在调用命令端之后)?

第 2 部分:在我更改了基于任务的 Web UI 并因此更改了作为 UI 基础的 ViewModel 之后,当 ViewModel 与命令端的实体(域模型)完全分离时,如何从中发出命令. 这些 ViewModel (DTO) 可能是与实体完全不同的“形状”。

更新

需要明确的是,我不打算使用异步和事务是一个加号,这只是命令和查询分离(不是完整的 CQRS,命令端只返回“void”)——我正在寻找这里的基础知识。此外,从我目前所读的内容来看,似乎 DDD 和有界上下文与 CQRS 齐头并进,在这一点上,我对 DDD 或聚合根以及有界上下文没有真正的经验,到目前为止还没有看到真正迫切需要参与这种方法/模式。目前,我似乎将在命令端使用 EF/Migrations,但尚未决定在查询端使用什么(正在考虑使用 ADO.NET)。

在我的例子中,命令端将返回一个对象,例如一个具有数据库生成的 CustomerId 的新客户。我将为命令和查询使用一个数据库,并希望使用数据库中构建的视图作为查询的返回模型(换句话说,我希望查询大部分“映射”到视图) . 我不知道如果我要使用查询端为命令端返回数据,在应该返回对象的情况下,命令应该如何看待。在 MVC 的情况下,我将尝试结合 Automapper 将对象转换为 ViewModel。

4

1 回答 1

1

我必须承认我很难在这里找到实际问题,但我会以标题作为我回答的基础。

首先,您声明您不会使用 CQRS,但您提出的解决方案非常接近 CQRS 架构,比其他任何东西都更接近。作为初学者并尝试一种模式但同时对其进行大量修改会增加高度的复杂性。

基本上,为了能够使用 CQS 成功读写,调用者必须控制 Id 的生成。这使您可以保存对象,然后在以后检索它,而不必依赖命令操作返回值。向导是这方面的优秀候选人。

另外我应该指出,CQS 和 CQRS 作为模式之间存在很大差异。CQS 是一种低级模式,几乎可以在任何架构中应用,而 CQRS 是非常高级的模式。他们共享设计理念,但仅此而已。

于 2014-01-10T14:35:10.677 回答