oop - 杂物类设计
问题描述
我有一个看起来像这样的类设计:
当 Main 接收到一个 item 时,其他 item 的属性可以根据某些规则进行更改。例如,如果 Item1 为红色,则 item2.level 必须为 3。有时一个值可以更改多个项目的属性。在 Main 类中实现所有规则是可能的,但它是一个混乱的代码。
所以,我已经实现了包含所有项目的聚合类。执行 Main.setItem(item1) 时,我使用 Aggregate.setItem1 更新 Aggregate 并运行 Rules.updateAggregate 以根据所有规则更新 Aggregate 的项目。
它有效,但规则类效率很低。因为它不知道哪个项目已更新,所以它始终应用所有规则。此外,updateAggregate 方法非常庞大且难以测试。
有没有更好的设计?
解决方案
为了减少耦合,您可以使用基于事件的设计。
Main
并且Item
类应该是事件的发布者,并且Item
类也应该是事件类型的订阅者,因为它们想要对事件做出反应。
您应该定义一些事件类型。例如 :
- 事件类型:“带有...的新项目”
- 事件类型:“第 1 项更改了 foo 属性”
所以对于...
推荐阅读
- java - 在没有 Firebase 控制台的情况下向所有设备发送推送通知
- python - 使用带有自定义标签的饼图创建甜甜圈
- java - FusionAuth授权
- raspberry-pi - 电子应用程序来管理设备的 wifi 连接
- python-3.x - 如何转换测试数据以选择与训练数据集相同的特征
- python - Logstash编解码器和字符编码问题
- konvajs - Konvajs:创建一个对其中一个孩子有一些约束的可拖动区域
- tensorflow - 您是否需要在 tensorflow 2 keras 中为自定义激活函数定义导数函数?
- api - 通过 API 添加时,Dspace 中比特流的“名称”为空?
- python - 同一图表上的多个图 - Matplotlib