Struts中ActionForm Bean和valueObject之间的问题

03-08-01 anonymous
在struts中油ActionFormBean负责从前台取数据和将数据传回前台显示,其本省是一个很标准的javabean,

而在后台数据处理时往往需要一个valueObject来存放数据

举个例子:用户信息

那么,在前台时必然需要一个ActionFormBean:

UserInfoFormBean

存放Name、Password、Sex、Age等等属性和各自的存取方法

还有继承自ActionForm的reset validate等方法

而在数据存取层中需要一个valueObject:

UserInfoBean:

同样存放的是Name、Password、Sex、Age等等属性和各自的存取方法

因此,这两个类将是非常相像的,但很多时候不能共用,因为会增加系统的耦合度,

但若分开又重复工作很多,而且两个类间的“同步(比如属性名或方法的更改等)“可能有问题,

不知道各位在实际应用中有什么好的方法或经验?

看到过的一个例子时放开写,在action中用commons-beanutli的bean复制在两个类间交换数据,倒是很方便

    

robbin
2003-08-01 11:52
必须分开写!ActionFormBean对应HTML的form,页面流程一改,Bean就要相应修改。Value Object是业务层的数据封装,两者不是一回事,除非小项目,大项目中不应该有大量重复的现象。

banq
2003-08-01 18:56
struts的ActionForm做得不是很灵活,以后估计可以具有拓展性,这样少一些VO,也就是DTO啊。

anonymous
2003-08-02 08:39
ActionForm和ValueObject中基本属性和方法几乎是一样的,所以感觉写两个类似的类的时候非常别扭,很重复,而且java不支持多重继承,不然倒是很好办,呵呵ValueObject是必须的,ActionForm倒是可以用DynaActionForm等动态构建,

不过总觉的有点不爽,唉,人懒倒连Ctrl+C Ctrl+V都不想干了:P:P呵呵

tyrones
2003-08-02 13:38
我的理解是:

1。对于CUD操作,由于流程是前端到后端,最终变成持久实体存储,所以可以用FORM or VO,都表示持久对象。至于分歧产生自分割俩层的业务层。由于对于页面数据要对1..*个DB Schema,所以要将FORM转换成VO。

2。对于R操作,流程是后端到前端,最终将最为临时的对象被去除(用户另行查找或关闭页面)。所以后端取出的是临时对象,我们也在这里用transient约束。转换也可发生在业务层,或直接显示。

对于2的理解,举例子如下:你从数据库查看一表中信息,在查看中,信息被更新,你用另一个session再次观看信息,如果从后端取出的信息存储在持久类中,此时持久类与表中信息将不一致。所以取出存放的信息应放在暂态类中。

不知道理解是否有误。

猜你喜欢
3Go 1 2 3 下一页