论文部分内容阅读
[摘要]目前,随着J2ee技术平台的逐渐成熟和完善,基于它的企业级的Web应用开发也越来越多,大部分的Web应用在层的划分上一般可以被分成4层,分别是:表示层、业务逻辑层、持久层和域模块层,每层在处理程序上都应该有明确的责任,不应该在功能上与其他层混合,并且每层要与其他层之间分开,降低彼此直接的耦合度,详细的分析基于JSH框架的多层架构的各层的具体功能,希望对大家有所帮助。
[关键词]Jsf SpringHibernate 架构
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)0810045-01
一、引言
这篇文章通过详细的分析各个层所应该具有的职责和功能,使大家思考怎样组合几个著名的框架使他们之间在企
业级应用中做到松散耦合,怎样在开发中建立你的构架,怎样让你的应用的各个层之间保持一致。富于挑战的是:组合这些框架使得每一层都以一种松耦合的方式彼此通信,而与底层的技术无关。文章将使用3种流行的开源框架来讨论组合框架的策略。表现层我们将使用Jsf,业务层我们将使用Spring,持久层使用Hibernate,当然,在项目中可以根据实际情况来选择到底需要哪一种,通过替换这些框架中的任何一种而得到同样的效果。
二、表示层
一般来讲,一个典型的Web应用的用于实现展示给用户看的那层就是表示层。表示层的功能是采集用户的信息输入、展示数据、控制页面导航并将用户的输入传递给业务逻辑层,表示层同时需要验证用户的输入和做些相关的前台验证工作。JSF非常适合于基于MVC的表示层架构,它在行为和表示之间提供了清晰的分离,它使得你可以采用熟悉的UI组件和web层概念而无需受限于某种特殊的脚本技术或标记语言。
表示层的主要功能是:
1.管理用户的请求,做出相应的响应。
2.提供一个控制器 ,委派调用业务逻辑层处理。
3.处理异常。
4.为显示提供一个模型。
5.UI验证。
但是,为了各层之间的松散耦合和清晰,有些功能不能放在表现层,如下:
1.直接的与数据库的通信,例如JDBC调用。
2.与你应用程序相关联的业务逻辑以及校验。
3.事务管理。
如果在表示层引入这些代码,将会带来高耦合和维护上的困难。
三、业务逻辑层
企业级Web应用的负责业务逻辑处理那层是业务层逻辑层。 从编码的视角来看,这层是最容易被忽视的一层。而我们却往往在表示层或持久层周围看到这些业务逻辑处理的代码,这其实是不正确的,因为它导致了程序代码的紧耦合,这样一来,随着时间推移和需求的变动这些代码讲变的很难维护。幸运的是,针对这一问题有些比较灵活的Frameworks存在。最受欢迎的一个开源框架是Spring,可以把它看作为microcontainers,它能让你很好的把对象搭配起来。 这个框架通过使用‘依赖注射’(dependency injection))这样的思想,把程序中所涉及到包含业务逻辑和Dao的Objects,例如:事务管理控制)、对象工厂、服务组件等都通过XML配置文件的形式联系起来,从而易于扩展和维护。
业务层所负责的如下:
1.处理应用程序的业务逻辑和业务校验
2.管理事务
3.允许与其它层相互作用的提供接口
4.管理业务层级别的对象的依赖。
5.在显示层和持久层之间增加了一个灵活的机制,使得他们不直接的联系在一起。
6.通过依赖注入实现从显示层到业务逻辑层之间的接口调用。
7.管理程序的执行(从业务层到持久层)。
四、持久层
该层主要是跟数据库打交道的一层,凡是涉及操作数据库的内容都在该层来实现,这里通常是程序最容易失控的地方。目前在持久层已经有好多种现成的持久化中间件可供选择,这些ORM开源框架提供的接口可以很好的方便数据库的操作,尤其是Hibernate,它对JDBC进行了轻量级的封装,不仅提供ORM映射服务,还提供了数据查询和数据缓存功能Java开发人员可以方便地通过Hibernate API来操作数据库,Hibernate的持久对象是基于POJO(Pure Old Java Object,简单传统Java对象)和Java 集合的。此外,使用Hibernate并不妨碍你正在使用的集成开发环境,极大的节省了和对象持久化有关的工作量。
下面是持久层需要实现的功能:
(一)查询对象的相关信息。Hibernate通过一个HQL查询语言或者正则表达的API来完成查询。HQL非常类似于SQL,只是把SQL里的table和columns用Object和它的fields代替。你需要学习一些新的HQL语言;不管怎样,他们容易理解而文档也做得很好。HQL是一种对象查询的自然语言,花很小的代价就能学习它。
(二)存储,更新,删除数据库记录。诸如Hibernate这类的高级ORM框架支持大部分主流数据库,并且他们支持 Parent/child关系,事务处理,继承和多态。
五、域模块层
如果我们致力于的是一个不是很复杂的Web的应用,我们需要一个对象集合,让它在不同层之间移动。域 模块层由实际需求中的业务对象组成,比如,OrderLineItem , Product等等。开发者在这层不用管那些DTOS(Design To Order Service),仅关注domain object即可。 例如,Hibernate允许你将数据库中的信息存放入域对象(domain objects),这样你可以在连接断开的情况下把这些数据通过表示层显示出来,而那些对象也可以返回给持久层,从而在数据库里进行更新。而且,你不必把对象转化成DTOS(这可能使得它在不同层之间的在传输过程中丢失),这个模型使得Java开发者能很自然运用面向对象编程,而不需要附加的代码。
六、四层架构图如下
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/siva/siva200815/siva20081539-1-l.jpg)
七、结束语
总之,从软件层次结构的角度来说,软件的框架要具有较高的伸缩性和可扩展性,本文所讨论的JSH多层轻量级架构,由于它采用了Jsf表现层框架,基于组件式的开发,同时又通过Spring的依赖注入以及Hibernate对象-关系映射机制,然后我们根据项目的需要引入域模块层,因而它的模块化设计得到了很好的应用,层次非常清晰,具有很好的可复用度,对架构扩展的一个有益尝试,虽然提供了非常好的应用开发模式,但是它还非常新,一直在发展中。轻量级架构结合Jsf、Spring、Hibernate,充分发挥了三者的优点, 基于轻量级框架的J2EE 架构开发简洁、结构清晰,有很好的可扩展性和可维护性,非常适于企业级的Web应用的设计与开发。
参考文献:
[1]曹广鑫、王谢华、王建凤等编著.Struts 数据库项目开发宝典,电子工业出版社,2006.1.
[2][美]曼著,铁手等译. JSF实战.人民邮电出版社,2007.3.
作者简介:
卢其龙,吉林大学珠海学院电子信息系,研究方向:电子信息科学与技术。
[关键词]Jsf SpringHibernate 架构
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)0810045-01
一、引言
这篇文章通过详细的分析各个层所应该具有的职责和功能,使大家思考怎样组合几个著名的框架使他们之间在企
业级应用中做到松散耦合,怎样在开发中建立你的构架,怎样让你的应用的各个层之间保持一致。富于挑战的是:组合这些框架使得每一层都以一种松耦合的方式彼此通信,而与底层的技术无关。文章将使用3种流行的开源框架来讨论组合框架的策略。表现层我们将使用Jsf,业务层我们将使用Spring,持久层使用Hibernate,当然,在项目中可以根据实际情况来选择到底需要哪一种,通过替换这些框架中的任何一种而得到同样的效果。
二、表示层
一般来讲,一个典型的Web应用的用于实现展示给用户看的那层就是表示层。表示层的功能是采集用户的信息输入、展示数据、控制页面导航并将用户的输入传递给业务逻辑层,表示层同时需要验证用户的输入和做些相关的前台验证工作。JSF非常适合于基于MVC的表示层架构,它在行为和表示之间提供了清晰的分离,它使得你可以采用熟悉的UI组件和web层概念而无需受限于某种特殊的脚本技术或标记语言。
表示层的主要功能是:
1.管理用户的请求,做出相应的响应。
2.提供一个控制器 ,委派调用业务逻辑层处理。
3.处理异常。
4.为显示提供一个模型。
5.UI验证。
但是,为了各层之间的松散耦合和清晰,有些功能不能放在表现层,如下:
1.直接的与数据库的通信,例如JDBC调用。
2.与你应用程序相关联的业务逻辑以及校验。
3.事务管理。
如果在表示层引入这些代码,将会带来高耦合和维护上的困难。
三、业务逻辑层
企业级Web应用的负责业务逻辑处理那层是业务层逻辑层。 从编码的视角来看,这层是最容易被忽视的一层。而我们却往往在表示层或持久层周围看到这些业务逻辑处理的代码,这其实是不正确的,因为它导致了程序代码的紧耦合,这样一来,随着时间推移和需求的变动这些代码讲变的很难维护。幸运的是,针对这一问题有些比较灵活的Frameworks存在。最受欢迎的一个开源框架是Spring,可以把它看作为microcontainers,它能让你很好的把对象搭配起来。 这个框架通过使用‘依赖注射’(dependency injection))这样的思想,把程序中所涉及到包含业务逻辑和Dao的Objects,例如:事务管理控制)、对象工厂、服务组件等都通过XML配置文件的形式联系起来,从而易于扩展和维护。
业务层所负责的如下:
1.处理应用程序的业务逻辑和业务校验
2.管理事务
3.允许与其它层相互作用的提供接口
4.管理业务层级别的对象的依赖。
5.在显示层和持久层之间增加了一个灵活的机制,使得他们不直接的联系在一起。
6.通过依赖注入实现从显示层到业务逻辑层之间的接口调用。
7.管理程序的执行(从业务层到持久层)。
四、持久层
该层主要是跟数据库打交道的一层,凡是涉及操作数据库的内容都在该层来实现,这里通常是程序最容易失控的地方。目前在持久层已经有好多种现成的持久化中间件可供选择,这些ORM开源框架提供的接口可以很好的方便数据库的操作,尤其是Hibernate,它对JDBC进行了轻量级的封装,不仅提供ORM映射服务,还提供了数据查询和数据缓存功能Java开发人员可以方便地通过Hibernate API来操作数据库,Hibernate的持久对象是基于POJO(Pure Old Java Object,简单传统Java对象)和Java 集合的。此外,使用Hibernate并不妨碍你正在使用的集成开发环境,极大的节省了和对象持久化有关的工作量。
下面是持久层需要实现的功能:
(一)查询对象的相关信息。Hibernate通过一个HQL查询语言或者正则表达的API来完成查询。HQL非常类似于SQL,只是把SQL里的table和columns用Object和它的fields代替。你需要学习一些新的HQL语言;不管怎样,他们容易理解而文档也做得很好。HQL是一种对象查询的自然语言,花很小的代价就能学习它。
(二)存储,更新,删除数据库记录。诸如Hibernate这类的高级ORM框架支持大部分主流数据库,并且他们支持 Parent/child关系,事务处理,继承和多态。
五、域模块层
如果我们致力于的是一个不是很复杂的Web的应用,我们需要一个对象集合,让它在不同层之间移动。域 模块层由实际需求中的业务对象组成,比如,OrderLineItem , Product等等。开发者在这层不用管那些DTOS(Design To Order Service),仅关注domain object即可。 例如,Hibernate允许你将数据库中的信息存放入域对象(domain objects),这样你可以在连接断开的情况下把这些数据通过表示层显示出来,而那些对象也可以返回给持久层,从而在数据库里进行更新。而且,你不必把对象转化成DTOS(这可能使得它在不同层之间的在传输过程中丢失),这个模型使得Java开发者能很自然运用面向对象编程,而不需要附加的代码。
六、四层架构图如下
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/siva/siva200815/siva20081539-1-l.jpg)
七、结束语
总之,从软件层次结构的角度来说,软件的框架要具有较高的伸缩性和可扩展性,本文所讨论的JSH多层轻量级架构,由于它采用了Jsf表现层框架,基于组件式的开发,同时又通过Spring的依赖注入以及Hibernate对象-关系映射机制,然后我们根据项目的需要引入域模块层,因而它的模块化设计得到了很好的应用,层次非常清晰,具有很好的可复用度,对架构扩展的一个有益尝试,虽然提供了非常好的应用开发模式,但是它还非常新,一直在发展中。轻量级架构结合Jsf、Spring、Hibernate,充分发挥了三者的优点, 基于轻量级框架的J2EE 架构开发简洁、结构清晰,有很好的可扩展性和可维护性,非常适于企业级的Web应用的设计与开发。
参考文献:
[1]曹广鑫、王谢华、王建凤等编著.Struts 数据库项目开发宝典,电子工业出版社,2006.1.
[2][美]曼著,铁手等译. JSF实战.人民邮电出版社,2007.3.
作者简介:
卢其龙,吉林大学珠海学院电子信息系,研究方向:电子信息科学与技术。