在一个大型项目中,尤其是基于J2EE的项目,一个好的框架设计极其重要,它是项目成败的关键。而要设计好框架,首先必须做的工作是深入理解需求,从中进行业务逻辑的抽象。
框架是一种特殊的软件,它在软件开发中有很高的重用性,同时它也需要高超的设计技巧。软件组织,使用框架来积累知识,对推动软件开发是一种有效的方式,那么,什么是框架呢?在设计模式中,Gamma等人为框架给出了一个定义: “框架就是一组协同工作的类,它们为特定类型的软件构筑了一个可重用的设计。”因此,框架是针对特定的问题领域的。
框架包括了一组抽象概念,这些抽象概念来源于问题领域。例如,struts是基于MVC模式进行设计的,所以它必须为model、view、control建立抽象概念。框架使得这些抽象概念相互协作,并提供了一种扩展的形式,以实现重用。这是框架的具体工作。框架在抽象概念上进行工作,定义抽象概念之间的协作方式。框架和普通软件或是类库的区别就在于,用户通过扩展框架来重用该框架。这些扩展点的设计称为框架设计的核心。例如,在struts1.0中,采用的是类继承的扩展方式(对Action进行扩展)。
框架对软件开发作用重大
知识积累。框架的核心价值是对知识的积累。软件开发是一项知识性的活动。但是知识存在于人的大脑中,是最难进行积累的。而在软件开发中,代码是最确定的知识,人和机器通过浏览代码都能够了解代码所表达的意思,而且不会出现不同的理解。所以,从代码出发进行知识的积累是最佳的办法。框架就是这种思路的产出物。框架包含了大量的代码,这些代码是对某个特定问题领域中抽象概念及这些抽象概念之间关系的描述。所以,框架能够胜任知识积累的工作。虽然代码是框架的核心,但是光有代码的框架是很难为人所理解的。代码的层次太低,开发人员从代码的角度来完全地理解框架是很困难的。所以,必须要有层次高于代码的工件来协助理解。这些工件可以是设计文档、领域模型、UML图、JavaDoc等。它们的目的都是为了帮助框架的开发人员和使用人员顺利地理解框架。
保护资产。知识积累本身就是一项对资产的保护工作。而另一项很重要的保护工作就是软件组织(尤其是企业)需要保证对知识的学习和改进是经过合法授权的。例如,知识的非法外流是任何组织都不希望看到的。将知识积累为框架的形式有助于缓解这种情况。框架可以是以源码形式发布的,也可以是以库形式发布的,为不同的框架用户选择不同的发布形式,可以起到权限控制的作用。
鼓励重用。框架之所以称为框架,是因为它可以重用。在软件组织中形成以框架为核心的开发方式,在开发中使用框架,并在开发完成后改进框架。在这个反覆的过程中,重用的工作就已经开展起来了。重用其实并没有那么困难,其实就是将通用的行为抽取出来。
优化架构。所谓软件架构,亦即体系结构,包括组件元素、元素互助合作模式、基础要求与限制。这说明架构的设计就是将各组件元素以某些理想的合作模式组织起来,以达成系统的基本功能和限制。框架其实就是在特定领域基于体系结构的可重用的设计,即框架是体系结构在特定领域下的应用。框架代表了一种优秀的软件架构。框架定义了扩展方式,从而规范了框架的使用行为。这使得软件能够保持整体架构的稳定性和一致性。
框架好坏关系J2EE项目成败
框架技术通过重用提高了软件的生产效率,一个软件系统由两大部分组成: 针对本应用的新设计和可重用的软件组件或框架。后者所占比例越大,那需要实现的新设计或实现工作量就会越小,生产效率越高、成本越低。J2EE项目成败主要取决于架构设计好坏以及合适框架的选择,而不是体现在对技术的具体应用上,常常有人将一个J2EE项目的失败归咎于后者,这可能是最大的误导。
J2EE项目是通过框架、模式的设计运用达到控制软件质量的目的的。虽然这是很多喜欢自由编程的程序员所不喜欢的,但是它带来了稳定的软件质量和可重用的组件,为规模生产创造了条件。不仅如此,它还降低了对开发框架以外其他开发人员的技术要求,使大多数开发人员无需很高的技术,就能在已有的框架下进行开发,而且能大大缩短开发周期。根据自己项目领域特点,在J2EE框架下设计自己领域的应用框架,不仅可以提高在该领域软件开发的效率,而且可以节约开发成本和维护成本。
框架的特征
● 框架包括大量类或组件,每一种类或组件都提供了某种概念的抽象;
● 框架定义了这些抽象如何协作解决问题;
● 框架组件可以重用;
● 框架在更高层次上组织模型。
如何进行有效的框架设计
一个好的框架设计是有一定的准则可供遵循的。
设计抽象层次。在框架的定义中,抽象体是至关重要的。抽象体是框架的目标,没有目标的框架决不是一个好框架,要么是一个类库,要么是一种编程语言。光有抽象体还是没有办法工作,还需要定义出抽象体的行为,有了行为之后,还需要规范、穷尽这些行为。
分析抽象行为的通用部分和非通用部分。在抽象体的行为中,有些动作是通用的,有些是特殊的。前者就是框架要实现的部分。而后者则作为扩展留给用户。将抽象层次提取为框架,并设计扩展点。有了抽象体、抽象体的通用行为之后,就可以设计扩展点了。最简单的扩展点是采用方法调用的方式,复杂的可能通过设计模式或是配置文件等方式。扩展点设计优劣的评价标准是使用起来是否方便,这里的使用包括应用、调试、测试等。
适当的使用设计模式。设计模式代表了先进的软件设计思路。在框架中适当地使用设计模式有助于改进框架的结构。在框架设计中不宜采用过多的设计模式,这会使得框架理解起来困难。
有效利用、隔离第三方技术。当前的软件开发向着协作的方向发展。在这种情况下,大量的第三方软件出现了。软件业的分工将会给软件业带来繁荣,但是对于软件组织来说,就需要考虑第三方软件的成本、生命力、本组织系统对其的依赖程度等问题。这部分工作应该交给框架。让框架来负责把核心应用和第三方技术隔离开来。因此,设计一个抽象的层次,把这些技术和核心应用隔离起来。
目前,许多应用系统都采用了基于Web的B/S结构应用,同时在应用层中包含了数据库、安全、人性化、交易化、分布式等等大量的软件技术,这些技术纷繁而复杂,不是一个人或者几个人可以单独完成的,而且其规模产生了数以万计的代码量和成千上万的各种资源。这些不仅要聚合在一起,同时,它们之间还要相互通信和访问,共同完成业务逻辑所要求的各种处理过程。因此,拥有能用来规范所有程序调用、访问、错误等常规处理的框架非常重要,同时框架还要保证程序的易读性、可交互性、可维护性等等这些保证质量的前提要求。所以框架不仅起到规范的作用,它还是出发点,是所有程序的起点和终点。
为此,框架必须综合现在先进的技术、设计模式、开发理念,用被广泛接受和认可的方法论产生的一套框架性核心代码,包括从前端Web交换到业务层数据交互、数据持久化和存储到事务,安全机制和错误处理等这些在开发中涉及的逻辑和方法。