Struts+Hibernate构造中J2EE的数据表示[Java编程]
本文“Struts+Hibernate构造中J2EE的数据表示[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在 struts+hibernate 这种构造中,是不该该把Hibernate产生的PO直接传送给JSP的,不管他是Iterator,还是List,这是一个计划错误.
我来谈谈在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) ---> Action Form Bean (Module) ---> Action(Control)
Action Form Bean是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显示之.
总结:
Form Bean 是Web层的数据表示,他不能被传送到业务层;PO是长期层的数据表示,在特定情形下,比方Hibernate中,他可以代替VO呈目前业务层,但是不管PO还是VO都必须限制在业务层内利用,最多到达Web层的Control,毫不能被散布到View去.
Form Bean 和PO之间的数据转化是在Action中举行滴.
以上是“Struts+Hibernate构造中J2EE的数据表示[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |