You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OOP正确实现:has-a关联场景下通知责任的归属判断

面向对象设计场景下通知责任归属方案选择

结论

优先选择由Product承担通知责任,对应实现Product#notify(Event),完全符合面向对象设计的核心原则。

核心理由

  • 符合信息专家原则:该原则要求将职责分配给持有完成职责所需全部信息的类。Product作为Event集合的持有者,掌握所有事件关联的业务上下文、以及需要接收通知的下游依赖(如价格同步模块、促销计算模块等)的绑定关系,天然具备执行通知动作的全部信息基础。
  • 符合单一职责原则:Event的核心定位是领域事件的载体,仅需要承载事件本身的元数据(如变动类型、变动值、触发时间)即可,不需要感知所属Product的外部依赖逻辑。如果把通知职责放到Event中,会让Event同时承担「数据载体」和「通知执行」两个不相关的职责,后续修改通知规则、新增事件类型时耦合度会非常高。
  • 规避逻辑循环问题:不需要在Product内部调用时出现this.events[i].notify(this)这种别扭的循环传参写法,代码可读性和可维护性更高。

额外优势

后续如果需要新增事件过滤、规则判断逻辑(比如低优先级事件不需要推送、特定状态的Product不发通知),直接在Product#notify方法中扩展即可,不需要修改所有Event的实现,扩展性更强。

内容的提问来源于stack exchange,提问作者mlntdrv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:36:05