面向对象设计中有几个设计原则, 可以避免实现中的坏味道.
其中之一是 OCP(Open Closed Principle) 开放封闭原则.
类(或模块) 都简称为类(class).
开放封闭 - 一个类, 应该对修改封闭, 应该对扩展开放.
修改 - 对已有实现的修改.
扩展 - 增加新功能.
尽量做到增加新功能(扩展)时, 不会修改(或尽量少修改)已有实现.
如果没预测到这种扩展的场景, 就必须经过重构, 将实现重构到适应这种扩展场景.
这样的话, 以后再有此类扩展, 就可以符合开放封闭原则了.
预测变化时, 不能预测的太超前, 要适度才好.
否则实现中留着好多适应未来很长时间以后才用到(可能永远也不用到)的设计, 也是一种坏味道.
为了保持预测变化的适度感, 可以应用极限编程的思路(迭代开发, 小步快跑. 可以完全不需要预测或只预测一点, 不要太超前).
适当预测一些(常规的变化趋势), 当出现没有预测到的那些场景出现时, 重构到符合OCP的场景, 然后添加新扩展.