Optimization 可重用的复杂读取模型

Optimization 可重用的复杂读取模型,optimization,domain-driven-design,cqrs,Optimization,Domain Driven Design,Cqrs,在我的组织中,我们有一张复杂的产品卡片,上面有许多不同的属性。我可以使用Steam产品卡来形象化我所说的内容:(PS:很棒的游戏,检查一下) 产品卡表示包括属性,如标题,说明,价格,以及关联,如截图,评论,评级,标签等。 产品的各个部分用于应用程序的不同部分——例如,您可以在用户库中找到标记列表(您不需要屏幕截图) 您将如何在这里构建read模型? a) 尝试创建小型通用视图模型(Screenshot,Tag),并在具体视图中组合它们(ProductCard,UserLibrary)? b) 创

在我的组织中,我们有一张复杂的产品卡片,上面有许多不同的属性。我可以使用Steam产品卡来形象化我所说的内容:(PS:很棒的游戏,检查一下)

产品卡表示包括属性,如
标题
说明
价格
,以及关联,如
截图
评论
评级
标签
等。 产品的各个部分用于应用程序的不同部分——例如,您可以在用户库中找到标记列表(您不需要屏幕截图)

您将如何在这里构建read模型? a) 尝试创建小型通用视图模型(
Screenshot
Tag
),并在具体视图中组合它们(
ProductCard
UserLibrary
)? b) 创建一个包含与产品相关的所有属性的视图模型?(性能方面-听起来不是很好) c) 为每个视图创建属性定制的视图模型?如果是这样,如果我必须在整个应用程序中重复使用某些特定部分(产品标题、价格等),我如何避免代码重复(我们在每个页面上使用产品的部分)? d) ?


我不能将事件监听器用作投影仪,因为产品状态是通过遗留CRUD应用程序更改的,我们无法修改该应用程序-我们依赖共享数据库。

为什么要避免代码重复?或者更具体地说,为什么要在不同的有界上下文中避免代码重复;)。。。如果您仅基于避免代码重复而创建依赖项,那么您将创建错误的抽象(与有效用例无关)

我将引用Sandi Metz的话:

复制比错误的抽象要便宜得多

宁可重复也不要错误的抽象


为什么要避免代码重复?或者更具体地说,为什么要在不同的有界上下文中避免代码重复;)。。。如果您仅基于避免代码重复而创建依赖项,那么您将创建错误的抽象(与有效用例无关)

我将引用Sandi Metz的话:

复制比错误的抽象要便宜得多

宁可重复也不要错误的抽象

答案是

为每个视图创建特性定制的视图模型

为什么??因为它是最简单、最可维护的解决方案。在读上下文中,您只是处理只读数据。您不需要封装或粒度表示(屏幕截图或标签的特定模型)。这并不意味着如果已经有了其他视图模型并且它们具有相同的数据,就不能重用它们,但这里的主要原则是创建一个视图模型,以便仅为特定视图服务

在此上下文中不存在重复,因为DRY指的是(相同上下文)行为而不是数据。

答案是

为每个视图创建特性定制的视图模型

为什么??因为它是最简单、最可维护的解决方案。在读上下文中,您只是处理只读数据。您不需要封装或粒度表示(屏幕截图或标签的特定模型)。这并不意味着如果已经有了其他视图模型并且它们具有相同的数据,就不能重用它们,但这里的主要原则是创建一个视图模型,以便仅为特定视图服务

在此上下文中不存在复制,因为DRY指的是(相同上下文)行为而不是数据