`
yangdaojun
  • 浏览: 23806 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

j2ee架构各层数据表示

阅读更多
Web层的数据表示是FormBean,数据来源于HTML Form POST
业务层的数据表示是VO
持久层的数据表示是PO,其数据来源于数据库,持久层的数据表示例如CMP

在一个规范的J2EE架构中,不同层的数据表示应该被限制在层内,而不应该扩散到其它层,这样可以降低层间的耦合性,提高J2EE架构整体的可维护性和可扩展性。比如说Web层的逻辑进行了修改,那么只需要修改FormBean的结构,而不需要触动业务层和持久层的代码修改。同样滴,当数据库表进行了小的调整,那么也只需要修改持久层数据表示,而不需要触动业务层代码和Web层代码。


不过由于Hibernate的强大功能,例如动态生成PO,PO的状态管理可以脱离Session,使得在应用了Hibernate的J2EE框架中,PO完全可以充当VO,因此我们下面把PO和VO合并,统称为PO。

先来谈谈ActionFormBean和持久层的PO之间的重大区别。

在简单的应用中,ActionFormBean和PO几乎是没有区别,所以很多人干脆就是用ActionFormBean来充当PO,于是ActionFormBean从JSP页面到Servlet控制层再到业务层,然后穿过持久层,最后一直映射到数据库表。真是一竿子捅到了底!

但是在复杂的应用中,ActionFormBean和PO是分离的,他们也不可能一样。ActionFormBean是和网页里面的Form表单一一对应的,Form里面有什么元素,Bean里面就有什么属性。而PO和数据库表对应,因此如果数据库表不修改,那么PO也不会修改,如果页面的流程和数据库表字段对应关系不一致,那么你又如何能够使用ActionFormBean来取代PO呢?

比如说吧,用户注册页面要求注册用户的基本信息,因此HTML Form里面包含了基本信息属性,于是你需要一个ActionFormBean来一一对应(注意:是一一对应),每个Bean属性对应一个文本框或者选择框什么的。

而用户这个持久对象呢?他的属性和ActionFormBean有什么明显不同呢?他会有一些ActionFormBean所没有的集合属性,比如说用户的权限属性,用户的组属性,用户的帖子等等。另外还有可能的是在ActionFormBean里面有3个属性,分别是用户的First Name, Middle Name, Last Name,而在我的User这个持久对象中就是一个 Name 对象属性。

假设我的注册页面原来只要你提供First Name,那么ActionFormBean就这一个属性,后来我要你提供全名,你要改ActionFormBean,加两个属性。但是这个时候PO是不应该修改滴,因为数据库没有改。

那么在一个完整的J2EE系统中应该如何进行合理的设计呢?

JSP(View) ---> ActionFormBean(Module) ---> Action(Control)

ActionFormBean是Web层的数据表示,它和HTML页面Form对应,只要Web页面的操作流程发生改变,它就要相应的进行修改,它不应该也不能被传递到业务层和持久层,否则一旦页面修改,会一直牵连到业务层和持久层的大面积的代码进行修改,对于软件的可维护性和可扩展性而言,是一个灾难,Actiont就是他的边界,到此为止!

Action(Web Control) ---> Business Bean ---> DAO ---> ORM --->DB

而PO则是业务层和持久层的数据表示,它在业务层和持久层之间进行流动,他不应该也不能被传递到Web层的View中去,而ActionServlet就是他的边界,到此为止!

然后来看一看整个架构的流程:

当用户通过浏览器访问网页,提交了一个页面。于是Action拿到了这个FormBean,他会把FormBean属性读出来,然后构造一个PO对象,再调用业务层的Bean类,完成了注册操作,重定向到成功页面。而业务层Bean收到这个PO对象之后,调用DAO接口方法,进行持久对象的持久化操作。

当用户查询某个会员的信息的时候,他用全名进行查询,于是Action得到一个UserNameFormBean包括了3个属性,分别是first name, middle name, last name,然后Action把UserNameFormBean的3个属性读出来,构造Name对象,再调用业务Bean,把Name对象传递给业务Bean,进行查询。

业务Bean取得Name(注意: Name对象只是User的一个属性)对象之后调用DAO接口,返回一个User的PO对象,注意这个User不同于在Web层使用的UserFormBean,他有很多集合属性滴。然后业务Bean把User对象返回给Action。

Action拿到User之后,把User的基本属性取出(集合属性如果不需要就免了),构造UserFormBean,然后把UserFormBean  request.setAttribute(...),然后重定向到查询结果页面。

查询页面拿到request对象里面的ActionFormBean,自动调用tag显示之。

总结:

FormBean是Web层的数据表示,他不能被传递到业务层;PO是持久层的数据表示,在特定情况下,例如Hibernate中,他可以取代VO出现在业务层,但是不管PO还是VO都必须限制在业务层内使用,最多到达Web层的Control,绝不能被扩散到View去。

FormBean和PO之间的数据转化是在Action中进行滴。
分享到:
评论

相关推荐

    J2EE架构中各层数据表示和传输的研究.doc

    在实际应用中,开发者可能会采用多种技术和框架来优化J2EE架构的数据表示和传输,如Hibernate用于对象关系映射,Spring框架提供了全面的企业级应用支持,包括AOP(面向切面编程)、DI(依赖注入)以及事务管理等。...

    J2EE架构师认证指南 .rar

    1. 分层架构:典型的J2EE应用通常采用三层架构,包括表示层(Web层)、业务逻辑层(EJB层)和数据访问层(数据库或持久化层)。 2. 模块化:通过模块化设计,可以提高系统的可维护性和可扩展性。每个模块应有明确的...

    结合struts和hibernate谈J2EE架构的数据表示.doc

    在J2EE架构中,数据表示的层次分明是保持系统模块化、低耦合和高可维护性的重要原则。本文将结合Struts和Hibernate两大框架,深入探讨在J2EE架构下不同层次的数据表示方法。 首先,Web层是用户交互的界面,其数据...

    J2EE体系架构介绍.ppt

    其中,表示层负责处理客户端的请求和响应,业务逻辑层负责处理业务逻辑,数据访问层负责访问数据库,数据存储层负责存储数据。 HandsOnJ2EE Without EJB J2EE Without EJB 是指不使用 Enterprise JavaBeans(EJB...

    J2EE架构数据表示:Struts+Hibernate

    总的来说,J2EE架构中的数据表示和流转应当遵循一定的规则,以保持各层的职责清晰。Struts和Hibernate的结合利用了它们各自的优点,使数据处理更加高效。然而,实际项目中可能会有妥协和权衡,例如直接使用PO作为VO...

    基于J2EE的多层架构的Web信息系统构建与设计.pdf

    在J2EE的多层架构中,表示层扮演着至关重要的角色,它直接与用户交互,负责呈现数据和接收用户输入。Struts框架是基于J2EE的一个成熟MVC框架,它通过Servlet、JSP技术,以及自定义标签和信息资源的整合,为Java Web...

    j2ee架构师

    J2EE架构由多个层次组成,主要包括客户端层、Web层、业务逻辑层(EJB层)和数据访问层(数据库层)。每个层次都有特定的功能,如客户端层负责用户交互,Web层处理HTTP请求,EJB层执行业务逻辑,而数据访问层则负责...

    Java与J2EE架构

    【Java与J2EE架构】是企业级应用开发的核心技术体系,主要涵盖了Java语言和基于Java的J2EE平台。J2EE(Java 2 Platform, Enterprise Edition)是由Oracle公司提供的一个用于构建分布式、多层的企业级应用程序的平台...

    J2EE体系结构图或三层结构图

    Presentation Layer(表示层)是 J2EE 体系结构图的最上层,负责处理用户界面和数据输入输出。该层通常使用 JavaServer Pages(JSP)、Servlet、JavaScript 等技术来实现。Presentation Layer 的主要任务是将用户的...

    j2EE架构师手册+J2EE OA 项目开发日记

    《J2EE架构师手册》和《J2EE OA项目开发日记》是两份非常重要的IT资源,专门针对Java企业级应用开发领域的高级技术人员,尤其是对J2EE架构师而言。这两份资料深入探讨了J2EE技术栈,以及在实际OA(办公自动化)项目...

    Struts开发指南之J2EE n层结构.doc

    在J2EE架构中,这一层通常由JavaBeans、Session Beans等组件实现,它们提供了与具体业务相关的服务。Struts框架虽然不直接涉及业务逻辑的实现,但它为业务逻辑的调用和数据的流转提供了便利。 #### 4. 数据访问层...

    基于J2EE架构的智能元搜索引擎系统设计与实现

    ### 基于J2EE架构的智能元搜索引擎系统设计与实现 #### 一、引言 随着互联网的快速发展,信息量呈爆炸性增长,如何有效地获取所需信息成为了亟待解决的问题。传统的搜索引擎通过索引网页来提供搜索服务,但往往...

    《J2EE架构与应用开发》大作业报告-电影售票系统

    - **业务对象层**:封装业务实体,如用户、电影、场次等,用于在各层之间传递信息,保持数据一致性。 4. **项目测试**:在开发完成后,进行全面的功能测试和性能测试,确保系统的稳定性和可靠性。这包括单元测试、...

    J2EE 三层结构讲解

    本书旨在帮助读者深入理解J2EE的三层架构模型,并通过具体的案例来阐述其核心组成部分——数据访问对象(DAO)模式的应用场景与实现细节。 #### 二、J2EE 三层架构概述 J2EE采用了一种分层架构设计思想,主要分为...

    j2ee架构师手册

    《J2EE架构师手册》是一本专注于Java企业级应用开发的专业指南,旨在帮助读者深入理解和掌握J2EE(Java 2 Platform, Enterprise Edition)架构系统的核心知识。J2EE作为Java平台上的一种标准,主要用于构建分布式、...

    J2EE架构师手册英文

    《J2EE架构师手册英文》是一本专为IT专业人士,特别是那些致力于J2EE平台的架构师准备的重要参考资料。这本书深入探讨了J2EE(Java 2 Platform, Enterprise Edition)技术栈,涵盖了从基础概念到高级设计原则的广泛...

    J2EE中MVC三层架构

    在J2EE开发中,MVC(Model-View-Controller)三层架构是一种广泛采用的设计模式,它有助于分离业务逻辑、用户界面和数据访问,从而提高代码的可维护性和可扩展性。本文主要针对初学者,讲解了如何在J2EE环境中实现...

    学习交流J2EE架构技术

    J2EE架构的核心理念是通过分层架构来组织应用,包括表示层、业务逻辑层和数据访问层,从而实现职责的分离,提高代码的可重用性和可维护性。 1.1 企业级应用的复杂性 企业级应用的复杂性体现在多个方面,包括: - ...

Global site tag (gtag.js) - Google Analytics