六大设计原则之六:开闭原则

背景

需求的变化是必然。那么当需求发生变化时,我们应该怎么样去实现新需求?可选方法有两个:1.修改原有代码;2.拓展原有代码。两个方法都可以实现新的需求,但是哪个方法更好呢?通过拓展原有代码的方法更好,原因主要有两个:1.提高效率;2.利于测试。

提高效率

程序员最痛苦的事情,莫过于阅读别人的代码。甭管原有的代码写得多么优秀还是多么糟糕,要把它读懂然后修改,都是一件异常痛苦的事。如果你接手过别人的项目,在修改别人代码的过程历经摧残后,你一定会很认同为什么在实现新需求时,要通过拓展原有的代码,而不是修改原有的代码。

通过拓展原有代码的方法,你不需要读懂原有代码的实现思路,你要做的大概就是了解一个类的接口,然后拓展这个类就行了,大大提高了开发效率。

利于测试

假设你历经九九八十一难,勉强读懂了原有的代码,然后你修改了其中一行代码,注意这里说的是一行代码,那么,你就能保证这对原有的功能不会产生任何影响吗?如果不能保证,那么是不是要对原有的功能重新测试一遍?

越是复杂的代码,修改后产生潜在问题的可能性越大。如果每次修改,都要让测试人员对原有功能重新测试一遍,那无疑就是对测试人员巨大的摧残。

通过拓展原有代码的方法,就能避免这个问题。由于对原有代码没有任何改动,所以就不需要对原有功能重新测试,这对于测试是非常有利的。

综上所述,我们知道实现新需求,要通过拓展原有代码,而不是修改原有的代码。通过拓展原有代码的方法显著提高开发人员和测试人员工作的幸福感,减少因为工作猝死的几率。

定义

通过上述的铺垫后,开闭原则(Open Closed Principle)的定义呼之欲出。我们直接来看一下开闭原则的定义:

Software entities like classes,modules and functions should be open for extension but closed for modifications.(类、模块和函数等软件实体应该对拓展开放,对修改关闭。)

上面我们提到,需求的变化是必然,当需求发生变化时,我们不能修改原有代码,我们要通过拓展原有代码去实现新需求。开闭原则要求软件实体要对拓展开放,而对修改关闭,其实就是对有利于应对需求变化的软件的总结。

实践

我们说有六大设计原则,但是它们之间不是平级的,其中开闭原则是总原则,是面向对象语言编程的终极目标,而另外五个原则只是针对于某一个具体问题。

要实现开闭原则,并非只有一条路径。其他五大设计原则,和后面要学习的23种设计模式,都为实现开闭原则提供了思路。

注意

开闭原则是终极目标,大师也无法百分百做到。但只要努力朝这个方向努力,可以显著改善一个系统的架构,做到拥抱变化。

你可能感兴趣的:(六大设计原则之六:开闭原则)