Optimization 可重用的复杂读取模型
在我的组织中,我们有一张复杂的产品卡片,上面有许多不同的属性。我可以使用Steam产品卡来形象化我所说的内容:(PS:很棒的游戏,检查一下) 产品卡表示包括属性,如Optimization 可重用的复杂读取模型,optimization,domain-driven-design,cqrs,Optimization,Domain Driven Design,Cqrs,在我的组织中,我们有一张复杂的产品卡片,上面有许多不同的属性。我可以使用Steam产品卡来形象化我所说的内容:(PS:很棒的游戏,检查一下) 产品卡表示包括属性,如标题,说明,价格,以及关联,如截图,评论,评级,标签等。 产品的各个部分用于应用程序的不同部分——例如,您可以在用户库中找到标记列表(您不需要屏幕截图) 您将如何在这里构建read模型? a) 尝试创建小型通用视图模型(Screenshot,Tag),并在具体视图中组合它们(ProductCard,UserLibrary)? b) 创
标题
,说明
,价格
,以及关联,如截图
,评论
,评级
,标签
等。
产品的各个部分用于应用程序的不同部分——例如,您可以在用户库中找到标记列表(您不需要屏幕截图)
您将如何在这里构建read模型?
a) 尝试创建小型通用视图模型(Screenshot
,Tag
),并在具体视图中组合它们(ProductCard
,UserLibrary
)?
b) 创建一个包含与产品相关的所有属性的视图模型?(性能方面-听起来不是很好)
c) 为每个视图创建属性定制的视图模型?如果是这样,如果我必须在整个应用程序中重复使用某些特定部分(产品标题、价格等),我如何避免代码重复(我们在每个页面上使用产品的部分)?
d) ?
我不能将事件监听器用作投影仪,因为产品状态是通过遗留CRUD应用程序更改的,我们无法修改该应用程序-我们依赖共享数据库。为什么要避免代码重复?或者更具体地说,为什么要在不同的有界上下文中避免代码重复;)。。。如果您仅基于避免代码重复而创建依赖项,那么您将创建错误的抽象(与有效用例无关) 我将引用Sandi Metz的话: 复制比错误的抽象要便宜得多 宁可重复也不要错误的抽象
为什么要避免代码重复?或者更具体地说,为什么要在不同的有界上下文中避免代码重复;)。。。如果您仅基于避免代码重复而创建依赖项,那么您将创建错误的抽象(与有效用例无关) 我将引用Sandi Metz的话: 复制比错误的抽象要便宜得多 宁可重复也不要错误的抽象 答案是 为每个视图创建特性定制的视图模型 为什么??因为它是最简单、最可维护的解决方案。在读上下文中,您只是处理只读数据。您不需要封装或粒度表示(屏幕截图或标签的特定模型)。这并不意味着如果已经有了其他视图模型并且它们具有相同的数据,就不能重用它们,但这里的主要原则是创建一个视图模型,以便仅为特定视图服务 在此上下文中不存在重复,因为DRY指的是(相同上下文)行为而不是数据。答案是 为每个视图创建特性定制的视图模型 为什么??因为它是最简单、最可维护的解决方案。在读上下文中,您只是处理只读数据。您不需要封装或粒度表示(屏幕截图或标签的特定模型)。这并不意味着如果已经有了其他视图模型并且它们具有相同的数据,就不能重用它们,但这里的主要原则是创建一个视图模型,以便仅为特定视图服务 在此上下文中不存在复制,因为DRY指的是(相同上下文)行为而不是数据