理解架构、框架与设计模式

来源:互联网 发布:北京交通规划问题 知乎 编辑:程序博客网 时间:2024/04/30 16:04

 原文地址:http://blog.csdn.net/yneos/article/details/4818099

 今天闲来无事,翻开《企业应用架构模式》随便看看,突然看到在引言中谈到“架构”一词,使我有所感处。还记得在上大学的时候,那时候感觉架构这个词很神秘,从那时起架构、架构设计、框架一类的词汇就像洪水般的向我涌来,系统架构设计师也就成为了最崇拜的职业之一,直到现在也是如此!三年过去了,架构这个词也一直深深的可刻在脑海当中。

    我想很多人都会和我有着同样的经历,也会有很多朋友一直在苦苦思索着,那么今天既然看到了这个词,就从我个人的角度来谈谈我对架构的理解,它与系统结构、方法、模式以及框架等词语的区别。希望能对和我一样在苦苦思索着的朋友们给与一点点帮助。

     首先要说明的是“架构”这个词至今为在止还没有一个人能够给出一个准确的定义。所以本人也不想也没有能力在这里做出这个名词的解释,这里只是谈谈个人的理解。

     个人认为架构是一种思维层面的东西,是一种设计意图或设计思想的表达。而架构的名子恰恰是你这种设计意图的代名词,这样可以不必每次都重新解释一遍你的设计思想或意图,方便够通与交流而已。比如MVC它是一种架构,当你看到或听到MVC架构这个词汇时,你就会意识到MVC的设计方案,而不必再对你做过多的解释。

    其实 架构并不神秘,它就在我们身边。你所参与的每个项目,你编写过的每个软件,其实都有它自身的架构。麻雀虽小,但五脏必须是俱全的。这里的架构在一定意义上等同于结构,考虑一下,无论软件有多大或多小,它都是有自身的结构的。但是架构又不完全等同与结构,他们只是在在一定的条件下等同,如果一个软件足够小,小的我们没有必要去分析和研究它的结构,那么这个时候结构才等同于架构。这就好比给软件命名一样,是不是非要把一个“闹钟程序”叫作“时间管理系统”,这使我想起了很多小旅店都起名叫XX宾馆,小饭店叫XX大酒店^_^ 。对于研究一个比较大型的系统时“结构”这个词已经不能囊括其研究范围。

    那么系统结构与架构又有什么区别呢?系统结构的概念在一般情况下往往要大于架构,这种情况比较常见。一个架构往往只能解决一个系统中的部分问题,一个系统可能需要使用多种架构来解决问题,即一个系统可能由多种架构构成。比如在一个企业应用中,我们可能会使用MVC架构解决界面表现与实现之间的代码分离问题,使用关系映射架构解决对象与数据库之间的映射问题,使用分层架构使核心的业务处理得到保护。当然也有一种架构也可以穿越几个系统,SOA就是这方面的例子。但这并不表示每个系统都只是由SOA框架组成。

    由此可见,架构只是解决问题的一种方案,这种方案是前辈们的经验总结。所以研究什么是架构并不重要,重要的是了解已经存在的架构能够帮助您解决什么问题。其实某个人提出一种架构,其目的是在于经验的分享,而不是用来说明什么是架构。好的架构(设计方案)往往会被广泛的学习和采纳用于解决自己面临的实际问题,这就是架构的意义。

    那么说到这,您是否想起了“设计模式”,没错,对于好的一种架构完全可以当做一种模式来应用,这就是“架构模式”。但个人认为还是有一定区别的,设计模式针对的问题往往要比架构所针对的问题更加细致,换名话说设计模式往往是针对某一个具体的设计问题而提出的解决方案,比如“适配器”模式就是适合于解决不同系统接口对接的设计问题,再比如“观察者”模式适合于解决同一份数据,在不同的表现形式(界面)中的同步问题。而架构所针对的问题往往更庞大一些,解决方案也更加复杂,其中某些具体的解决方案也可能会应用到设计模式,一般是一套自己成体系的方案。思考一下刚才所提到的MVC、分层、关系映射,他们所解决的问题是不是要比某种设计模式更为复杂和庞大呢?如果把设计模式和架构所解决的问题量化,设计模式所解决的问题量为1,那么架构解决问题的数量要远大于1。再比如“分布式架构”,它可以解决分布在网络中的各结点之间的协作问题,EJB规范就是将这种架构升级为规范的一种描述,而JBossApplicationServer与GlassFish等都是基于这种架构而实现的软件产品,而在实现这些产品的过程中(或者说在实现这种架构的过程中)又运用了很多设计模式来解决具体的设计问题。

    再提一下框架,架构只是一种设计意图,用来描述某种设计方案,这种方案也可能是一种较高层次的设计,或者说是一种设计的指导纲要,具体的实现方式可能有多种。例如基于“总线”架构的系统,各应用模块间的消息通讯应用如何实现是没有要求的,您可以使用任何一种实现方式,可以自己去编写实现,也可以使用别人已经编写的实现。这就是框架,框架是别人写好的半成品软件,它可能不能直接做为你的最终产品,但你可以借助于它省掉你很多的工作量。典型的专门用于实现某种架构的框架比如:StringMVC、Hibernate等,有的框架可能包含了几种不同的架构的实现,Spring就是一个比较综合的框架,SpringMVC只是其中一个部分。另外有些框架可能也说不出它实现的是哪种架构,或采用哪种架构而设计,其实这是很正常的,因为有些架构不知道,因为有的架构可能没有一个很响亮的名字,也可能是没人总结过的一种架构,但不管怎样,其实框架本的身就是自己架构的一种描述与实现。比如微软的MFC、Delphi的VCL、Swing、ExtJS他们都是很好表现层框架,同时他们也都是基于消息机制的一种架构的实现。

    我们生活在团队中,沟通变得越来越重要,所以有的时候对这些概念的理解达成一致还是很重要的,这样才能有效的沟通,避免理解上的差异。