3.1软件系统的可维护性
一个软件系统设计的可维护性较低,即随着性能要求的变化而"腐烂“的真正原因有四个:过于僵硬、过于脆弱、复用率低、黏度过高。
过于僵硬:牵一发而动全身,无法轻易插入新的功能模块。
过于脆弱:蝴蝶效应,修改一处代码,引起其他地方不可预测的故障
复用率低:轮子和各处牵扯太多,无法复用,导致到处都有新造的轮子
黏度过高:不能保存原始设计意图和原始设计框架,让程序员更倾向于用特例的方式硬插入新代码满足眼前的需求。说明系统的黏度过高。
好的系统设计应有如下性质:可扩展性、灵活性、可插入性
可扩展性:可方便增加新的性能
灵活性:允许代码修改平稳的发生,不会波及其他模块
可插入性:接口化,实现类可方便替换,如零件的标准化
3.2系统的可复用性
复用亦即重用,可提高生产效率、提高软件质量、改善系统的可维护性
传统的复用:代码的拷贝粘贴、算法的复用、数据结构的复用
有的复用可提高可维护性,有的复用破坏了可维护性,因此支持可维护性的复用才是设计的准则
面向对象的复用:从算法和数据结构的层面上升到宏观的商业逻辑的抽象层次上
对可维护性的支持
适当提高可复用性,可提高系统的可扩展性。有赖于:”开-闭“原则,里氏代换原则、依赖倒转原则、组合/聚合复用原则。
适当提高可复用性,可提高系统的灵活性。有赖于”开-闭“原则、迪米特法则、接口隔离原则。
适当提高可复用性,可提高系统的可插入性。有赖于:”开-闭“原则,里氏代换原则、依赖倒转原则、组合/聚合复用原则。
设计原则:
- ”开-闭“原则 OCP
- 里氏代换原则 LSP
- 依赖倒转原则 DIP
- 接口隔离原则 ISP
- 组合/聚合复用原则 CARP
- 迪米特法则 LoD
3.3老子论不武
善为士者不武。好的系统设计师设计好的系统,维护时不需要让人大动干戈
天下有道,走马以粪,天下无道,戎马生于效。好的设计,维护成本低;差的设计,维护人员疲于奔命