我们在平时购买电器的时候很少很少去考虑电器本身的维护,然而软件设计却恰恰需要,即使是在开发的过程中也是重复着维护的过程。面对维护的时候我们遇到了很多困难,从一个个的小的变化致使后来的系统濒临崩溃。至少我现在在作的这个老人介护系统就是这么一个状态,每次修改都感觉是伤筋动骨的,即使是一个非常小的修改,牵涉非常多的所谓的“朋友程序”。造成这样的现状的原因无非是以下几点:
- 过于僵硬。一个小小的修改对于程序来说都是困难的。
- 过于脆弱。与僵硬同时存在,修改了一个地方,就不知道什么其它的地方会被影响。
- 复用率低。基本都是原始的复用:“copy”。新模块的代码基本都是靠copy重新写一边。
- 黏度太高。非常多的短路桥,使得系统在短期有很效率的效果,却使得后期关联太多,无法维护。
这里我们就要提出我们的设计的目标:
l 拓展性。遵循原则:OCP, LSP, DIP, CARP
l 灵活性。遵循原则:OCP, ISP, LOD
l 插入性。遵循原则:OCP, LSP, CARP, DIP
为了达到以上3个目标,我们平时设计系统,编写代码的时候就要有些基本的原则来遵循,才能使我们能够轻松的为了将来的变化和维护还有复用做出很好的铺垫。
l “开-闭原则”(open-closed principle, OCP)
l “里氏代换原则”(Liskov Substation principle, LSP)
l “依赖倒转原则”(Dependency inversion principle, DIP)
l “接口隔离原则”(Interface Segregation principle, ISP)
l “组合/聚合原则”(Composition/Aggregation Principle, CARP)
l “迪米特法则”(Law of Demeter, LOD)
继承,是封装变化的方法,而不是从一般到特殊的方法。
一种可变性不应该跟另外一种可变性混合在一起,否则。类继承一般不会超过2层,否则就代表可变性混合在一起了。