设计模式、设计框架等等技术层出不穷,就想被打开的潘多拉魔盒,让人应接不暇,内心充满恐惧。显然,如果盲目的学习这些技术,确实是非常累的事情,但是当我学习了一段时间之后,开始有了一种感觉,就是:尽管设计模式有23种之多,许多模式之间除了外在的表现之外,其本质总是有些似曾相识的感觉。设计框架同样如此,尽管在开源社区不断有新的框架推出,但是有些基本的原则在支配着它们的发展方向。
只有弄清楚这些最本质的东西,才能把握最核心的内核,无论外延如何变化都能行至水穷处,笑看风云淡。
那么这些本质的内核是什么呢?
软件业现在已经发展成为一项工程,所以,已经形成了很多规范和建议,这些都是先贤在实践中总结出来的。这些说到底就是如何更好的开发软件以及如何改动尽可能小的扩展现有的系统。其实就是可扩展性,这就是软件设计和发展的原动力和初衷。
好的系统不能是一团乱麻,而应该是条理清晰。即内核小,而外延丰富,并且外延可以扩展,如何能做到可扩展呢?就是使内核更加纯净,外延的变化不会影响到它,就是降低耦合度,即所有软件规范和建议的最基本点:高内聚、低耦合。
如何能做到解耦呢?一系列的设计原则就被先贤们总结出来了:
1、 封装变化;
2、 多用组合,少用继承;
3、 针对接口编程,而不是针对具体实现编程;
4、 开闭原则:对扩展开放,对修改关闭;
5、 依赖抽象,不要依赖抽象类;
6、 只和朋友交谈;
7、 好莱坞原则: 别找我,我会找你;
8、 类应该只有一个改变的理由。
当然这些设计原则其实最基本的就是:面向抽象,而不是具体实现!这也是解耦的最重要的和最基本的手段。
然后又在这些设计原则的基础上,先贤们又总结出来了设计模式。这都是帮助我们更好的降低耦合度。
其实在软件工程的级别上来说,设计模式是在类-对象一级的解耦。而更高一个层次的解耦,即整体设计上的解耦呢,这种思想就是导致了框架的产生。
开源社区不断推出的各种框架其实在本质上都是在整体设计上解耦,为此提出的"POJOs"让系统的内核更加纯净,而"依赖注入","AOP"等等则是在次基础上不改变内核,而使外延更加丰富。同时这些框架都不约而同的选择了XML,这样可以更能使解耦发挥到极致,当改变发生时,不需改变源代码,只需修改一下配置文件即可。
发展的脚步不会停止,但是方向是确定的,就是为了可扩展,这是软件发展的原动力。
以上纯属个人愚见而已,并不奢求他人附和。
分享到:
相关推荐
关于某著名通讯公司增值业务一点愚见.doc
对于这一点有一定争论,很多人认为数值策划应该更多的参与项目的设计而非只是简单的去执行,事实上,国内目前很多数值策划确实是比较深入的参与了项目的总体设计的,个人愚见,造成这种局面的主要原因,大多都是因为...
SQL性能编写技术说明书(个人愚见,仅供参考)
stm32f103+ucos-ii 硬件平台:stm32f103 软件平平台:Keil uVision4 注:在weishao提供的《步步清晰之uCOSII 在STM32 上的移植-图文并茂版》帮助下完成
3.Gartner:面向服务的体系结构是一种客房机/服务器软件设计方法,其中的应用程序由软件服务和软件服务的使用者(也称为客户机或服务请求方)组成。SOA与更为通用的客户机/服务器模型不同,其定义强调软件组件间的...
以试验箱的形式教授通信原理,其实很难说触及到通信本质的知识,不如给学生多布置一些MATLAB的实验。个人愚见这种实验方式对学生的个人成长作用有限,希望这份实验报告汇总能帮到大家。
(亲测)但是在windows系统下,目前Python2和Python3中,tkinter的编写略有不同,我个人愚见,py3调用基本要大写,py2调用基本要小写。 下面是本人实验的一个登录小界面,主要由登录界面和系统页面构
个人愚见,不对之处希望勿喷。本人非211,985学校,全程摸索,也不懂什么某大佬说的曲线拟合。解决环岛,个人觉的内八就够了。这里用直立小环岛为例,进行说明,但是纯靠内八一定会存在由于赛道铺设存在问题,比如...
个人愚见使用Python做信号处理远没有使用Matlab简便和成熟,后者就是做信号、控制起家的。 Python的应用应该着眼于丰富的通用库和易编程性,可以随时随地的涂两行代码干成一件事,故本书关于Traits和TraitsUI的...
com本质论 COM原理与应用COM技术内幕 深入解析ATL,可以按这个顺序来看这些书,以上愚见,请指点.
我们在这篇文章中一起探讨下,其中内容仅代表个人观点,难免偏颇和愚见,欢迎各位留言,一起讨论。先从一个比较有趣的故事和大家分享一下:“某富翁娶妻,有三个人选,富翁给了三个女孩各一千元,请她们把房间装满。...
软件测试工作的核心技术在哪里?软件测试测试这行,如果按照客观规律总的来说是:入门容易,提升难。有些人做测试8-9年了,其针对同一个产品的测试思路和方法,与测试...仅个人愚见:测试工具开发和自动化测试开发主
个人一点愚见,某网站数据有分析价值,才会有人爬,因为给爬多了运营小姐姐很生气,该网站才会去研究怎么反爬,于是反反爬,于是反反反爬,于是反反反反爬。。。。。连selenium这么低效的东西都给扯出来写爬虫,可以...
总结用axis2发布项目总结,有一些是前辈的,只是在这里做了总结而已。新人愚见,多多包涵。
2.公司要对现有的运营模式或者某 个产品进⾏评估确定是否需要进⾏调整或者优化;3.公司下达了战略⽬标或短期⽬标需要通过分析看如何达成。要确定需求就必须与需求⽅ 进⾏沟通,清楚的确认需求的内容或者⾃⼰要分析前...
节点特性1:节点类似与哈希表,当向节点内加入一个新属性时,返回成功,当向节点内加入一个已存在的同名属性时则返回失败,利用这个特性可以很容易判断数组成员是不是重复。节点特性2:虽然无法加入同名的属性,但却...
在这个延伸的发展中,我个人盯着数百个实际盯着,以便你不必。“实际上没有”在您访问的任何网站上准确地替换“实际”和其他表达式,为您带来安心我们都受益。 功能包括:* 准确的: 取代“实际”并尝试保留案例,...