第二章 J2EE设计模式
在我们形成了对框架、模式的简单认知以后。作为背景知识,这一章中我们主要了解和理解J2EE设计模式,以期获得J2EE设计模式的全貌。由于在SUN公司的网站上[i]有整个J2EE模式的详细的介绍,重复介绍就没什么必要了。但是有张图,根据本文的内在要求,是必须要看的。从中我们会进一步漓清框架、模式、具体的技术(如J2EE技术)、设计一个应用之间的关系。
可以这样来理解这张图片:
首先,它直接显示了J2EE技术体系中这个模式和各种模式之间的关系。在迄今的J2EE模式体系中,定型的模式就这么15种,他们分布在J2EE技术的不通层次上,相互之间通过一定的方式随着层次间的交互而交互。值得强调的是这是迄今为止的J2EE模式总揽。新的设计模式会随着实践的进一步加深而不断出现。更有意思的是模式归于层次的划分方法[iii]与抽象设计划分方法[iv],这两种划分方法都给人有元素周期表的感觉,恐怕实际实践中也会有元素周期表的效用,促进新的模式的产生呢。
其次,它体现了J2EE技术是一种框架软件。框架可以认为是一个适用于某个领域的软件包。这个软件包提供了相应领域的各个问题的解决方法。J2EE是一种框架软件,提供了一组API,供企业级计算之用。这种框架软件的体现在了一种类似工作流的东西,一种从头到尾的企业解决方案次序。
再次,它隐含了框架与设计模式之前的血肉联系。框架是血脉、是骨架,设计模式是肉,肉依附与血脉与骨架,框架中会有各种设计模式。用体系结构的眼光来看设计模式是细粒度的元素,而框架这是粗粒度的。设计模式是支撑架构的一种重要组件,这与建筑有相象的地方,一个建筑设计时,需要建筑架构设计;施工中,用到建筑规则和模式。在J2EE整体的框架下,目前涵盖的“元素”是15种,当然没有发现的元素是客观存在的。
最后,它蕴含了应用程序设计的理念。本质上设计一个良好可伸缩的应用本身前期工作就是设计一个框架结构。不过这种框架又是在另一层意义上的框架了。这是一类在J2EE技术(框架)体系内的框架。我们基于J2EE技术可以设计许多适合更具体应用的框架,这样可以更方便的开发,更高效率的重用。在这种框架内部当然也可以用到若干种、甚至全部上图中设计模式,毕竟设计模式只是砖头。但是,好的框架设计能够给我们带来J2EE所带来的任何好处、具备其所具有的特点;简单的框架结构则可能被固化为一次不可再扩张更不用说重用的应用。实际上现在已经有很多开源组织设计的框架结构了,比如Cocoon,Struts等。他们都有不同的应用范畴[v]。
[i] http://java.sun.com/j2ee/blueprints/design_patterns/
[ii] 图片来源:http://java.sun.com/blueprints/patterns/catalog.html
[iii] 《Core J2EE Patterns》中的分类方法。
[iv] 《设计模式》一书的划分方法。
[v] 大部分框架结构是开源的。在http://sourceforge.net/上有上千的开源项目。
Cocoon的下载地址: http://xml.apache.org/cocoon
Struts的下载地址(Jbuilder8以后集成了这种框架):http://jakarta.apache.org/struts
http://jakarta.apache.org/ 上还有很多其他开放源码框架与其他项目的下载。