(一)
架构、框架、模式是一种从大到小的关系,也是一种组合关系。
架构一般针对一个行业或一类应用,是技术和应用完美的结合。
框架因为比较小,很多表现为中间件,框架一般是从技术角度解决同类问题,例如J道数据增删改查框架就解决了所有数据库系统中大量数据增删改查的功能开发,框架是从技术的横切面去解决实际应用问题。
模式则更小了,越小越灵活,可重用的范围更广。
一个框架可能使用了多个模式,而一个架构有可能应用了多个框架,这样一个大型系统的设计基本从主骨干到骨架基本能够被设计者考虑设计到,也可以想见,一个系统被细化成了很多工作量,例如一个部分细化到工厂模式,那么就可以要求程序员实现工厂模式的代码即可。
(二)
看一下架构(Architecture)和框架(Framework)的定义:
Architecture:
1. An underlying base or foundation especially for an organization or a system.
2. The art and science of designing and erecting buildings.
3. A style and method of design and construction:
4. Orderly arrangement of parts; structure:
Framework:
1. A structure for supporting or enclosing something else, especially a skeletal support used as the basis for something being constructed.
2. A fundamental structure, as for a written work or a system of ideas.
从以上的定义,应该可以这样理解:
架构是宏观上的。定义构成一个系统的各个组成部分。比如基于J2EE的三层架构:WEB层,应用中间层及数据层,从宏观上定义系统的各个组成部分。
框架是具体化的架构。用于细化整个架构或某一组成部分。如Struts是定义WEB层的框架。
具体到一个应用开发我们首先定义架构:基于.NET or J2EE,三层架构还是Client/Server. 然后基于选定的架构,确立系统框架。框架又可由多个design pattern实现
所以架构和框架一个广义,一个具体,共存于一个系统中
(三)
简单说来,框架应当包含设计重用和代码重用两层意思,并且提供一些扩展点(书上说得好象叫热点)及使用说明(cookbook)来实现框架的使用。比如继承一个SessionBean类并实现自己的业务逻辑,我们就是在使用J2EE框架。Struts也是相同,它定义并实现了Web层MVC的模式,ActionServlet类,Action类等之间的关系(设计重用及代码重用),我们通过继承Action和FormBean类来使用Struts.
模式简单说来就是一些Best Practice,他代表了一种设计重用。
(四)
架构定义了系统是如何组织的,并不关心具体的问题域
而框架是架构在某一问题域的具体化,更关注的是可重用性。在该问题域内,只需要扩展框架的可扩展部分,就可以适应新的变化。比如说,MVC是一个架构,而Struts是一个MVC框架。
(五)
图2-7 架构和框架的区别
架构是高远的,决定了更大、更高方面的取舍、做法--战略