我将使用 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。