首页 > 解决方案 > 杂物类设计

问题描述

我有一个看起来像这样的类设计:

在此处输入图像描述

当 Main 接收到一个 item 时,其他 item 的属性可以根据某些规则进行更改。例如,如果 Item1 为红色,则 item2.level 必须为 3。有时一个值可以更改多个项目的属性。在 Main 类中实现所有规则是可能的,但它是一个混乱的代码。

所以,我已经实现了包含所有项目的聚合类。执行 Main.setItem(item1) 时,我使用 Aggregate.setItem1 更新 Aggregate 并运行 Rules.updateAggregate 以根据所有规则更新 Aggregate 的项目。

它有效,但规则类效率很低。因为它不知道哪个项目已更新,所以它始终应用所有规则。此外,updateAggregate 方法非常庞大且难以测试。

有没有更好的设计?

标签: oopdesign-patterns

解决方案


为了减少耦合,您可以使用基于事件的设计。
Main并且Item类应该是事件的发布者,并且Item类也应该是事件类型的订阅者,因为它们想要对事件做出反应。
您应该定义一些事件类型。例如 :

  • 事件类型:“带有...的新项目”
  • 事件类型:“第 1 项更改了 foo 属性”

所以对于...


推荐阅读