如何设计一个好的J2EE开发框架

来源:互联网 发布:守望先锋看数据 编辑:程序博客网 时间:2024/05/21 10:30

        框架是一种特殊的软件,它在软件开发中有很高的重用性,同时它也需要高超的设计技巧。软件组织,使用框架来积累知识,对推动软件开发是一种有效的方式,那么,什么是框架呢?在设计模式中,Gamma等人为框架给出了一个定义:“框架就是一组协同工作的类,它们为特定类型的软件构筑了一个可重用的设计。”因此,框架是针对特定的问题领域的。
  J2EE开发框架主要有Hibernate,Spring,Struts2,EXTJS,Json。
        Hibernate
  Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。   核心接口简介 Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五个核心接口分别加以介绍。
  Session接口
  Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session。
  SessionFactory接口
  SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
  Configuration接口
  Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
  Transaction接口
  Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。
  Query和Criteria接口
  Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。
  Spring框架
  Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。
  Struts2框架
  相对Struts 1而言,Struts2号称是一个全新的框架。Struts 2 与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个框架:WebWork基础上发展起来的,Struts2是WebWork的升级,而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证:而且吸收了Struts 1和WebWork两者的优势。   Apache Struts2是一个优雅的,可扩展的JAVA EE web框架。框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。
  EXTJS框架
  Ext最初是YUI的一个扩展,也可以扩展自JQuery和Prototype。自1.1版开始,Ext已经可以独立运行,不需要依赖于那些外部库。从Ext 2.0版可以使用许多不同的基础库,例如YUI、JQuery和Prototype,或者是可以独立的运行。   ExtJS是一个非常棒的Ajax框架,可以用来开发富有华丽外观的富客户端应用,能使b/s应用更加具有活力。ExtJS是一个用javascript编写,与后台技术无关的前端ajax框架。因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用程序中。   注:YUI(Yahoo! UI Library )是一个开源的JavaScript库,与Ajax、DHTML和DOM等技术一起使用可以用于创建富有交互性的Web应用,它还包含丰富的CSS资源。
  Json框架
  JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。   JSON的具体形式:   1、对象是一个无序的“‘名称/值’对”集合。一个对象以“{”开始,以“}”结束。每个“名称”后跟一个“:”,“‘名称/值’对”之间使用“,”分隔。   2、数组是值(value)的有序集合。一个数组以“[”开始,“]”结束。值之间使用“,”分隔。   3、值(value)可以是双引号括起来的字符串(String)、数值(number)、true、false、null、对象(object)或者数组(array)。这些结构可以嵌套。   4、字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜体转义。一个字符(character)即一个单独的字符串(characeter string).
  框架包括了一组抽象概念,这些抽象概念来源于问题领域。例如,struts是基于MVC模式进行设计的,所以它必须为model、view、control建立抽象概念。框架使得这些抽象概念相互协作,并提供了一种扩展的形式,以实现重用。这是框架的具体工作。框架在抽象概念上进行工作,定义抽象概念之间的协作方式。框架和普通软件或是类库的区别就在于,用户通过扩展框架来重用该框架。这些扩展点的设计称为框架设计的核心。例如,在struts1.0中,采用的是类继承的扩展方式(对Action进行扩展)。
  框架对软件开发作用重大
  知识积累。框架的核心价值是对知识的积累。软件开发是一项知识性的活动。但是知识存在于人的大脑中,是最难进行积累的。而在软件开发中,代码是最确定的知识,人和机器通过浏览代码都能够了解代码所表达的意思,而且不会出现不同的理解。所以,从代码出发进行知识的积累是最佳的办法。框架就是这种思路的产出物。框架包含了大量的代码,这些代码是对某个特定问题领域中抽象概念及这些抽象概念之间关系的描述。所以,框架能够胜任知识积累的工作。虽然代码是框架的核心,但是光有代码的框架是很难为人所理解的。代码的层次太低,开发人员从代码的角度来完全地理解框架是很困难的。所以,必须要有层次高于代码的工件来协助理解。这些工件可以是设计文档、领域模型、UML图、JavaDoc等。它们的目的都是为了帮助框架的开发人员和使用人员顺利地理解框架。
  保护资产。知识积累本身就是一项对资产的保护工作。而另一项很重要的保护工作就是软件组织(尤其是企业)需要保证对知识的学习和改进是经过合法授权的。例如,知识的非法外流是任何组织都不希望看到的。将知识积累为框架的形式有助于缓解这种情况。框架可以是以源码形式发布的,也可以是以库形式发布的,为不同的框架用户选择不同的发布形式,可以起到权限控制的作用。
  鼓励重用。框架之所以称为框架,是因为它可以重用。在软件组织中形成以框架为核心的开发方式,在开发中使用框架,并在开发完成后改进框架。在这个反覆的过程中,重用的工作就已经开展起来了。重用其实并没有那么困难,其实就是将通用的行为抽取出来。
  优化架构。所谓软件架构,亦即体系结构,包括组件元素、元素互助合作模式、基础要求与限制。这说明架构的设计就是将各组件元素以某些理想的合作模式组织起来,以达成系统的基本功能和限制。框架其实就是在特定领域基于体系结构的可重用的设计,即框架是体系结构在特定领域下的应用。框架代表了一种优秀的软件架构。框架定义了扩展方式,从而规范了框架的使用行为。这使得软件能够保持整体架构的稳定性和一致性。
  框架好坏关系J2EE项目成败
  框架技术通过重用提高了软件的生产效率,一个软件系统由两大部分组成:针对本应用的新设计和可重用的软件组件或框架。后者所占比例越大,那需要实现的新设计或实现工作量就会越小,生产效率越高、成本越低。J2EE项目成败主要取决于架构设计好坏以及合适框架的选择,而不是体现在对技术的具体应用上,常常有人将一个J2EE项目的失败归咎于后者,这可能是最大的误导。
  J2EE项目是通过框架、模式的设计运用达到控制软件质量的目的的。虽然这是很多喜欢自由编程的程序员所不喜欢的,但是它带来了稳定的软件质量和可重用的组件,为规模生产创造了条件。不仅如此,它还降低了对开发框架以外其他开发人员的技术要求,使大多数开发人员无需很高的技术,就能在已有的框架下进行开发,而且能大大缩短开发周期。根据自己项目领域特点,在J2EE框架下设计自己领域的应用框架,不仅可以提高在该领域软件开发的效率,而且可以节约开发成本和维护成本。
  框架的特征
  ◆框架包括大量类或组件,每一种类或组件都提供了某种概念的抽象;
  ◆框架定义了这些抽象如何协作解决问题;
  ◆框架组件可以重用;
  ◆框架在更高层次上组织模型。
  如何进行有效的框架设计
  一个好的框架设计是有一定的准则可供遵循的。
  设计抽象层次。在框架的定义中,抽象体是至关重要的。抽象体是框架的目标,没有目标的框架决不是一个好框架,要么是一个类库,要么是一种编程语言。光有抽象体还是没有办法工作,还需要定义出抽象体的行为,有了行为之后,还需要规范、穷尽这些行为。
  分析抽象行为的通用部分和非通用部分。在抽象体的行为中,有些动作是通用的,有些是特殊的。前者就是框架要实现的部分。而后者则作为扩展留给用户。将抽象层次提取为框架,并设计扩展点。有了抽象体、抽象体的通用行为之后,就可以设计扩展点了。最简单的扩展点是采用方法调用的方式,复杂的可能通过设计模式或是配置文件等方式。扩展点设计优劣的评价标准是使用起来是否方便,这里的使用包括应用、调试、测试等。
  适当的使用设计模式。设计模式代表了先进的软件设计思路。在框架中适当地使用设计模式有助于改进框架的结构。在框架设计中不宜采用过多的设计模式,这会使得框架理解起来困难。
  有效利用、隔离第三方技术。当前的软件开发向着协作的方向发展。在这种情况下,大量的第三方软件出现了。软件业的分工将会给软件业带来繁荣,但是对于软件组织来说,就需要考虑第三方软件的成本、生命力、本组织系统对其的依赖程度等问题。这部分工作应该交给框架。让框架来负责把核心应用和第三方技术隔离开来。因此,设计一个抽象的层次,把这些技术和核心应用隔离起来。
  目前,许多应用系统都采用了基于Web的B/S结构应用,同时在应用层中包含了数据库、安全、人性化、交易化、分布式等等大量的软件技术,这些技术纷繁而复杂,不是一个人或者几个人可以单独完成的,而且其规模产生了数以万计的代码量和成千上万的各种资源。这些不仅要聚合在一起,同时,它们之间还要相互通信和访问,共同完成业务逻辑所要求的各种处理过程。因此,拥有能用来规范所有程序调用、访问、错误等常规处理的框架非常重要,同时框架还要保证程序的易读性、可交互性、可维护性等等这些保证质量的前提要求。所以框架不仅起到规范的作用,它还是出发点,是所有程序的起点和终点。
  为此,框架必须综合现在先进的技术、设计模式、开发理念,用被广泛接受和认可的方法论产生的一套框架性核心代码,包括从前端Web交换到业务层数据交互、数据持久化和存储到事务,安全机制和错误处理等这些在开发中涉及的逻辑和方法。