黄国强 2023/5/24
敏捷开发方法中有个说法是拥抱变化,拥抱变化不是随意变更需求,而是对已知变化点进行封装。人对未知的东西是无法预测的,所以不需要考虑,否则就是过度设计。
我常说的一句话:“架构反映需求,设计封装变化”。继续前文说到 switch 存在的问题。这里 switch 就是提醒你这里是个变化点,需要用面向对象的方法做个设计。软件中存在各种数据类型,这个是我们已知的。所以这里必须做个设计,把数据做为所有数据类型的基类。输出也有多种类型,同样我们也把输出作为一个基类。
最后我们形成这样的类图。类图的风格是我喜欢的风格,理由见[参考链接]1。后续依然延续这个风格。
图上,Data 类和 Output 类是互相知道的,但是他们都对自己的派生类以及别的类的派生类一无所知。比如Data类既不知道String(字符串)类,也不知道Screen(屏幕)类。
这样的设计符合了敏捷开发的开闭原则(The Open Closed Principle),即对扩展是开放的,对修改是封闭的。未来不管 Data 类和 Output 类增加什么派生类,调用他们的代码都无需修改。
[参考链接]