4.2 开放-封闭原则

小菜:“开放、封闭,具体怎么解释呢?”

开放-封闭原则,是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。[ASD]

大鸟:“这个原则其实是有两个特征,一个是说‘对于扩展是开放的(Open for extension)’,另一个是说‘对于更改是封闭的(Closed for modification)’[ASD]。”

大鸟:“我们在做任何系统的时候,都不要指望系统一开始时需求确定,就再也不会变化,这是不现实也不科学的想法,而既然需求是一定会变化的,那么如何在面对需求的变化时,设计的软件可以相对容易修改,不至于说,新需求一来,就要把整个程序推倒重来。怎样的设计才能面对需求的改变却可以保持相对稳定,从而使得系统可以在第一个版本以后不断推出新的版本呢?[ASD],开放-封闭给我们答案。”

小菜:“我明白了,你的意思是说,设计软件要容易维护又不容易出问题的最好的办法,就是多扩展,少修改?”

大鸟:“是的,比如说,我是公司老板,我规定,九点上班,不允许迟到。但有几个公司骨干,老是迟到。如果你是老板你怎么做?”

小菜:“严格执行考勤制度,迟到扣钱。”

大鸟:“你倒是够狠,但实际情况是,有的员工家离公司太远,有的员工每天上午要送小孩子上学,交通一堵就不得不迟到了。”

小菜:“这个,让他们有特殊原因的人打报告,然后允许他们迟到。”

大鸟:“哈,谈何容易,别的不迟到的员工不答应了呀,凭什么他能迟到,我就不能,大家都是工作,我上午也完全可以多睡会再来。”

小菜:“那怎么办?老是迟到的确也不好,但不让迟到也不现实。家的远近,交通是否堵塞也不是可以控制的。”

大鸟:“仔细想想,你会发现,其实迟到不是主要问题,每天保证8小时的工作量是老板最需要的,甚至8小时工作时间也不是主要问题,业绩目标的完成或超额完成才是最重要的指标,于是应该改变管理方式,比如弹性上班工作制,早到早下班,晚到晚下班,或者每人每月允许三次迟到,迟到者当天下班补时间等等,对市场销售人员可能就更加以业绩为标准,工作时间不固定了——这其实就是对工作时间或业绩成效的修改关闭,而对时间制度扩展的开放。”

小菜:“这就需要老板自己很清楚最希望达到的目的是什么,制定的制度才最合理有效。”

大鸟:“对的,用我们古人的理论来说,管理需要中庸之道。”