现在java开发中存在好多名词啊:
PO - persistence object(CMP、BMP可归与此)
VO - value object
DTO - data transfer object
BO - business object
POLO - Plain Old Java Object
detached PO ...
还有
View Object, 界面展现需要的对象,如Struts的FormBean
那么多xxO,只会把系统复杂化,增加理解、维护系统的困难度。
也许Java在不断进步吧,当EJB 2.0出来的时候,Core j2ee Patterns中的Composite EnityBean就失去了意义,也许EJB 3.0出来的时候,DTO等也就失去了意义。
如果以后使用了采用POJO的模型的EJB 3.0,问题是不是会简单了很多呢。
不过目前还是有些问题比较困惑。
如果分层的话,
对于前台界面,业务层,还有持久层,其需要的数据可能是不同的。
假若前台界面对应FormBean,业务层对应BO或者VO,而持久层对应PO.
那么当有些字段在BO中存在(而业务层不一定每次都处理这些字段,只是在有需要的时候处理),而在FormBean中不存在。
当在前台界面查询到数据并修改的时候,如果jsp页面里面不存在对应的表单对象,生成的FormBean里面也没有这些字段的数据,然后FormBean的值传递给了BO,再有BO传递给PO进行数据库更新工作。期间这些本来有值的字段自从页面提交后就一直没有了值,更新丢失了。
目前我的解决办法是,FormBean包含BO中的所有字段,当数据库中的数据传到FormBean对象后把对象缓存起来,当struts生成FormBean的时候,再根据页面里面有的表单对象更新缓存起来的那个FormBean,感觉很复杂。
假如用HashMap记录更新的字段?好象工作量增加了不少。
不知道大家都是如何处理的,谢谢