J2EE
架构中各层的数据表示方法
Web
层的数据表示是
FormBean
,数据来源于
HTML Form POST
业务层的数据表示是
VO
持久层的数据表示是
PO
,其数据来源于数据库,持久层的数据表示例如
CMP
。在一个规范的
J2EE
架构中,不同层的数据表示应该被限制在层内,而不应该扩散到其它层,这样可以降低层间的耦合性,提高
J2EE
架构整体的可维护性和可扩展性。比如说
Web
层的逻辑进行了修改,那么只需要修改
FormBean
的结构,而不需要触动业务层和持久层的代码修改。同样滴,当数据库表进行了小的调整,那么也只需要修改持久层数据表示,而不需要触动业务层代码和
Web
层代码。
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
接口方法,进行持久对象的持久化操作。
业务
Bean
取得
Name(
注意
: Name
对象只是
User
的一个属性
)
对象之后调用
DAO
接口,返回一个
User
的
PO
对象,注意这个
User
不同于在
Web
层使用的
UserFormBean
,他有很多集合属性滴。然后业务
Bean
把
User
对象返回给
Action
。
总结:
Form Bean
是
Web
层的数据表示,他不能被传递到业务层;
PO
是持久层的数据表示,在特定情况下,例如
Hibernate
中,他可以取代
VO
出现在业务层,但是不管
PO
还是
VO
都必须限制在业务层内使用,最多到达
Web
层的
Control
,绝不能被扩散到
View
去。
Form Bean
和
PO
之间的数据转化是在
Action
中进行滴。