论坛首页 Java版 Hibernate

讨论一下PO、FormBean的转化实现

浏览 2923 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2004-11-25
看了robbin的《结合struts和hibernate谈J2EE架构的数据表示》一文,对其中的PO和FormBean的转化实现产生了疑问。
引用

总结:

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



如果数据转化在Action中进行,我感觉Action的代码就过于混乱,难道每针对一个FormBean,如果有需要转化,都在Action中做copy工作嘛?即使是用了BeanUtils,对于不同的需要,进行转化的函数也是不同的(显然formbean和po的字段不可能一一对应)。在这种情况下,如何去实现PO和FormBean之间的转化比较好呢?难道真的去写一个庞大的转化类嘛?
   
时间:2004-11-25
如果说绝对不能让VO出现在VIEW层有点过于绝对化了,即使是用MVC也难免会直接有写JSP的时候,在JSP页面里面不用VO用什么。
   
0 请登录后投票
时间:2004-11-25
我只是希望大家讨论以下如何实现这样得转化,至于转化得必要性我倒是觉得没有什么必要再讨论了。

我现在是写了一个庞大得Convert类,将source bean和dest bean作为参数传入然后做大量得copy工作,由于常常有一个po对应于两个vo得部分选项或者至少是po和vo不对应得情况,所以我觉得维护这样的一个Convert类非常麻烦,希望大家给点建议。
   
0 请登录后投票
时间:2004-11-25
我基本上是
Taglib + BeanUtil + DataHandler 配合来转化我要的数据....
有时也直接将VO传到页面,比如List的情况。。为List中的每一个
对象做copyProperties,偶觉的没必要,偶是直接传List的
然后在页面用tag解析,比如1:男,0:女之类的东西...
业务复杂的时候也没有什么办法,老老实实写吧。。
   
0 请登录后投票
时间:2004-11-26
偶是传递po的clone到view。。。。
   
0 请登录后投票
时间:2004-11-26
downpour 写道
我只是希望大家讨论以下如何实现这样得转化,至于转化得必要性我倒是觉得没有什么必要再讨论了。

我现在是写了一个庞大得Convert类,将source bean和dest bean作为参数传入然后做大量得copy工作,由于常常有一个po对应于两个vo得部分选项或者至少是po和vo不对应得情况,所以我觉得维护这样的一个Convert类非常麻烦,希望大家给点建议。

能否列举一些具体代码,说明“麻烦”所在。
copy是按照属性名称进行对应的吗?
   
0 请登录后投票
时间:2004-11-28
我的随便举一个常见的例子吧。前一段时间我就做过一个项目,它对时间的输入有比较高的精度要求,所以把时,分,秒什么的都分开输入了。这个时候,formbean可能像这样:
[code:1]
public class XXXForm extends ActionForm {
private String host;
private String detail;
private String date;
private String hour;
private String minute;
private String second;
......
}
[/code:1]
然而真正的po可能是这样:
[code:1]
public class XXXPO {
private String host;
private String detail;
private Date time;
......
}
[/code:1]
那么在这里,就必须把那么多字段转化到一个字段上去,一般我会写一个函数Convert,首先用BeanUtils根据name把相同的copy过去,然后不同name的再处理。

然而,我发觉,在这种转化越来越多的时候,Convert函数就会越来越多,因为转化都是与具体的业务逻辑相关,似乎简化不得,如此庞大的的函数集合如何去管理呢?
   
0 请登录后投票
时间:2004-11-29
N/A
   
0 请登录后投票
时间:2004-11-29
downpour 写道
我的随便举一个常见的例子吧...

类型转换、转换中产生错误信息的管理、转换后的整体数据校验,应该统一考虑。
不知你在转换中是否使用了java.beans.PropertyEditor和java.beans.PropertyEditorSupport。

还可以参考Spring框架中org.springframework.beans和org.springframework.validation包中的代码,如果运气好可以直接使用。
   
0 请登录后投票
论坛首页 Java版 Hibernate

跳转论坛:
JavaEye推荐