设计模式、设计框架等等技术层出不穷,就想被打开的潘多拉魔盒,让人应接不暇,内心充满恐惧。显然,如果盲目的学习这些技术,确实是非常累的事情,但是当我学习了一段时间之后,开始有了一种感觉,就是:尽管设计模式有23种之多,许多模式之间除了外在的表现之外,其本质总是有些似曾相识的感觉。设计框架同样如此,尽管在开源社区不断有新的框架推出,但是有些基本的原则在支配着它们的发展方向。
只有弄清楚这些最本质的东西,才能把握最核心的内核,无论外延如何变化都能行至水穷处,笑看风云淡。
那么这些本质的内核是什么呢?
软件业现在已经发展成为一项工程,所以,已经形成了很多规范和建议,这些都是先贤在实践中总结出来的。这些说到底就是如何更好的开发软件以及如何改动尽可能小的扩展现有的系统。其实就是可扩展性,这就是软件设计和发展的原动力和初衷。
好的系统不能是一团乱麻,而应该是条理清晰。即内核小,而外延丰富,并且外延可以扩展,如何能做到可扩展呢?就是使内核更加纯净,外延的变化不会影响到它,就是降低耦合度,即所有软件规范和建议的最基本点:高内聚、低耦合。
如何能做到解耦呢?一系列的设计原则就被先贤们总结出来了:
1、 封装变化;
2、 多用组合,少用继承;
3、 针对接口编程,而不是针对具体实现编程;
4、 开闭原则:对扩展开放,对修改关闭;
5、 依赖抽象,不要依赖抽象类;
6、 只和朋友交谈;
7、 好莱坞原则: 别找我,我会找你;
8、 类应该只有一个改变的理由。
当然这些设计原则其实最基本的就是:面向抽象,而不是具体实现!这也是解耦的最重要的和最基本的手段。
然后又在这些设计原则的基础上,先贤们又总结出来了设计模式。这都是帮助我们更好的降低耦合度。
其实在软件工程的级别上来说,设计模式是在类-对象一级的解耦。而更高一个层次的解耦,即整体设计上的解耦呢,这种思想就是导致了框架的产生。
开源社区不断推出的各种框架其实在本质上都是在整体设计上解耦,为此提出的"POJOs"让系统的内核更加纯净,而"依赖注入","AOP"等等则是在次基础上不改变内核,而使外延更加丰富。同时这些框架都不约而同的选择了XML,这样可以更能使解耦发挥到极致,当改变发生时,不需改变源代码,只需修改一下配置文件即可。
发展的脚步不会停止,但是方向是确定的,就是为了可扩展,这是软件发展的原动力。
以上纯属个人愚见而已,并不奢求他人附和。