加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > 阅读中心 > 软件学习

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

时间:2014-05-04 10:04:14  来源:不详  作者:佚名
 
  在 struts+ hibernate
不管他是Iterator,还是Li
这种结构中,是不应该把Hiber
st,这是一个设计错误。
nate产生的PO直接传递给JSP的,


  我来谈谈在J2EE架构中各层的数据表示方法:                                 

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

  在一个规范的J2EE架构
,这样可以降低层间的耦合
辑进行了修改,那么只需要
同样滴,当数据库表进行了
层代码和Web层代码。
中,不同层的数据表示应该被限
性,提高J2EE架构整体的可维护
修改FormBean的结构,而不需要
小的调整,那么也只需要修改持

制在层内,而不应该扩散到其它层
性和可扩展性。比如说Web层的逻
触动业务层和持久层的代码修改。
久层数据表示,而不需要触动业务


  不过由于Hibernate的
得在应用了Hibernate的J2E
为PO。
强大功能,例如动态生成PO,PO
E框架中,PO完全可以充当VO,

的状态管理可以脱离Session,使
因此我们下面把PO和VO合并,统称


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

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

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

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


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

  假设我的注册页面原来
我要你提供全名,你要改Ac
为数据库没有改。
只要你提供First Name,那么Ac
tionFormBean,加两个属性。但

tionFormBean就这一个属性,后来
是这个时候PO是不应该修改滴,因


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

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


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


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


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

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

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


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


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


  Action拿到User之后,
UserFormBean,然后把User
面。
把User的基本属性取出(集合属
FormBean request.setAttribut

性如果不需要就免了),构造
e(...),然后重定向到查询结果页


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

  总结:                                                                       

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

  FormBean和PO之间的数据转化是在Action中进行滴。               
 
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
后牧工业区厂房1500平出租
后牧工业区厂房1500平
现实的童话公主艾米·罗森
现实的童话公主艾米·
科比专为大场面而生
科比专为大场面而生
“最美清洁工”原是《赤壁》宫女
“最美清洁工”原是《
相关文章
    无相关信息
栏目更新
栏目热门