举个栗子,如果不是邓小平提出一国两制的思想,香港澳门不会那么顺利回归。
原因主要是大陆的社会主义制度不能修改,而香港澳门长期在资本主义制度下管理和发展,所以回归时强行修改香港澳门的制度也不合理,所以用“一国两制”来解决制度差异造成的矛盾是最合理的办法。
在软件设计模式中,这种不能修改,但可以扩展的思想也是最重要的一种设计原则,就是 开放-封闭原则(The Open-Closed Principle,简称OCP)
开放-封闭原则,是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。
这个原则有2个特征,一个是“对于扩展是开放的”,另一个是“对于更改是封闭的”。
何时应对变化
我们在做任何系统的时候,都不要指望系统一开始时需求确定,就再也不会变化,这是不现实也不科学的想法。
设计的时候,时刻要考虑,尽量让这个类足够好,写好了就不要去修改,如果新需求来,增加一些类就完事了,原来的代码能不动则不动。
绝对的修改关闭是不可能的。无论模块多么的“封闭”,都会存在一些无法对之封闭的变化。
既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。
他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。
我们很难预测,但我们却可以在发生小变化时,就及早想办法应对发生更大变化的可能。
在我们最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。
比如现在让你写一个加法程序,你在client类完成,此时变化还未发生。
然后我让你加一个减法,这时候你发现需要修改这个类,这就违背了开放-封闭原则
于是你考虑重构程序,增加一个抽象的算法类,继承它,每次只需要新增算法而不用修改client了
面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码
反思
学.net和学前端这两件事,.net学习是工作必须
所以学前端之前,.net学习不能更改,雷打不动的,这就是对修改关闭
但是如果只埋头学习.net,就等于放弃了将来很多好公司,和回老家的工作机会,毕竟.net只在北上广深才好找工作
所以完全可以抽出一点时间,在不影响.net学习和工作的前提下,来学习前端开发
既不影响.net学习和工作,又可以增加未来机会的可能性,这就是对扩展开放,对修改关闭的意义。