知识卡片

继承的主要价值是多态而非复用

普通读书笔记卡 · 1977.aa

内容

继承的目的绝不仅仅是复用,甚至可以说复用并非其主要价值,毕竟”聚合/合成优先复用原则”已是OO金科玉律。继承的主要价值在于支持多态,以利用Liskov替换原则让子类替换父类而不改变行为,并允许定义新子类满足功能扩展,保证对扩展开放。在Java/C#中受单继承约束,定义抽象接口实现多态更普遍。无论继承多态还是接口多态,都应站在领域逻辑角度思考是否需引入合理抽象应对未来变化。采用继承多态时需考虑对应数据模型能否在ORM中实现继承、并选合理策略;若继承/接口多态针对的是领域行为,则与领域模型持久化无关,也就无须考虑领域模型与数据模型间的映射。发散:先判断多态针对的是”状态/结构”还是”纯行为”——只有前者才牵扯继承的ORM策略选择。

参考来源

- 位置:《解构领域驱动设计》第19章 19.2.2(源文件:_epub-src/OEBPS/032.xhtml) - 结论依据:原文强调继承主要价值是多态而非复用,并区分针对行为的多态与持久化无关。 - 原始内容:继承的主要价值在于支持多态,以利用Liskov替换原则……如果继承多态与接口多态针对领域行为,则与领域模型的持久化无关。