CQRS:每个屏幕一个读取模型,具有复杂的 UI / 多维数据
CQRS: One Read Model Per Screen With Complex UI / Multiple Dimensions of Data
在支持支持不同维度数据的更复杂 UI 时,我正在努力为我的查询建模和读取模型。
想象一个场景,我有一个 OrderDetailView
,用于显示订单详细信息(订单行等)的屏幕。
现在想象一个显示相同订单详细信息的屏幕,以及可以为订单提供服务的送货公司列表。
问题:
我要为这个屏幕创建一个单独的 ViewModel
吗?我很难为它命名,但也许是 OrderDeliveryView
之类的?或者 AssignDeliveryToOrderView
。对于这些更复杂的屏幕,以最终将要执行的操作命名是否是一种好的做法?
我们的读取模型存在于 SQL 数据库中。我可以看到存储订单详细信息和视图的送货公司列表的唯一方法是使用两个单独的表。两个表都将通过 OrderDeliveryView 规范器根据相关事件进行更新。
如果是这种情况,是否最好只使用现有的 OrderDetailView
并从 UI 调用第二个查询:GetAvailableDeliveryCompanies
return一个DeliveryCompanyListView
。这些模型更接近于我所见过的示例。
简而言之,根据您的经验,接受这个复杂的视图需要两个表并继续前进是否更好?或者认识到 "half" 的视图已经由现有视图提供,并让 UI 进行多次查询?
您在 UI 中使用的模型不一定需要与存储方式相同。我会为您拥有的每个屏幕创建一个单独的 ViewModel
。
也就是说,根据技术的不同,您可以 "reuse" 您的 ViewModel
。例如,ASP.NET 有一个概念 Partial View
。也就是说,您可以创建一个通用 View
(和 ViewModel
)以跨多个屏幕/页面重复使用。
SQL 上的 Views
/Tables
可以针对它们的检索方式进行优化。但是,这不会阻止您为单个 ViewModel
/ 屏幕多次调用数据库。
关于 ViewModel
的命名,我建议根据它在 UI 上执行的操作来命名它,而不是将它与数据存储耦合。
在支持支持不同维度数据的更复杂 UI 时,我正在努力为我的查询建模和读取模型。
想象一个场景,我有一个 OrderDetailView
,用于显示订单详细信息(订单行等)的屏幕。
现在想象一个显示相同订单详细信息的屏幕,以及可以为订单提供服务的送货公司列表。
问题:
我要为这个屏幕创建一个单独的
ViewModel
吗?我很难为它命名,但也许是OrderDeliveryView
之类的?或者AssignDeliveryToOrderView
。对于这些更复杂的屏幕,以最终将要执行的操作命名是否是一种好的做法?我们的读取模型存在于 SQL 数据库中。我可以看到存储订单详细信息和视图的送货公司列表的唯一方法是使用两个单独的表。两个表都将通过 OrderDeliveryView 规范器根据相关事件进行更新。
如果是这种情况,是否最好只使用现有的
OrderDetailView
并从 UI 调用第二个查询:GetAvailableDeliveryCompanies
return一个DeliveryCompanyListView
。这些模型更接近于我所见过的示例。
简而言之,根据您的经验,接受这个复杂的视图需要两个表并继续前进是否更好?或者认识到 "half" 的视图已经由现有视图提供,并让 UI 进行多次查询?
您在 UI 中使用的模型不一定需要与存储方式相同。我会为您拥有的每个屏幕创建一个单独的 ViewModel
。
也就是说,根据技术的不同,您可以 "reuse" 您的 ViewModel
。例如,ASP.NET 有一个概念 Partial View
。也就是说,您可以创建一个通用 View
(和 ViewModel
)以跨多个屏幕/页面重复使用。
SQL 上的 Views
/Tables
可以针对它们的检索方式进行优化。但是,这不会阻止您为单个 ViewModel
/ 屏幕多次调用数据库。
关于 ViewModel
的命名,我建议根据它在 UI 上执行的操作来命名它,而不是将它与数据存储耦合。