CQRS:每个屏幕一个读取模型,具有复杂的 UI / 多维数据

CQRS: One Read Model Per Screen With Complex UI / Multiple Dimensions of Data

在支持支持不同维度数据的更复杂 UI 时,我正在努力为我的查询建模和读取模型。

想象一个场景,我有一个 OrderDetailView,用于显示订单详细信息(订单行等)的屏幕。

现在想象一个显示相同订单详细信息的屏幕,以及可以为订单提供服务的送货公司列表。

问题:

简而言之,根据您的经验,接受这个复杂的视图需要两个表并继续前进是否更好?或者认识到 "half" 的视图已经由现有视图提供,并让 UI 进行多次查询?

您在 UI 中使用的模型不一定需要与存储方式相同。我会为您拥有的每个屏幕创建一个单独的 ViewModel

也就是说,根据技术的不同,您可以 "reuse" 您的 ViewModel。例如,ASP.NET 有一个概念 Partial View。也就是说,您可以创建一个通用 View(和 ViewModel)以跨多个屏幕/页面重复使用。

SQL 上的 Views/Tables 可以针对它们的检索方式进行优化。但是,这不会阻止您为单个 ViewModel/ 屏幕多次调用数据库。

关于 ViewModel 的命名,我建议根据它在 UI 上执行的操作来命名它,而不是将它与数据存储耦合。