|
|
|
|
|
|
|
首先说明我是个新手,这些概念我接触不久,我把我的想法提出来,希望大家指正 比如说一个系统设计到两个概念:“用户”、“订单” 用户跟订单是一对多关系,这里就不讨论权限(角色)那些概念了。
首先在form里,我们的页面让输入用户信息:用户名、密码,但是这里需要注意的是,这个信息里密码一般都是让输入两次的,那么我们的UserInfoForm如下: public class UserInfoForm{ private String name; private String pwd1; private String pwd2; get.... set....方法 } 注意这里有pwd1和pwd2两个值,跟页面两个文本框绑定
接着是vo,vo拿来传值的,但是vo里不需要两个pwd了,而vo又与订单有关联关系,故我理解vo应该这样: public class UserInfoVO{ private String name; private String pwd; private List<OrderInfoVO> orderList; get set方法... } 我理解vo里是正统的OO思想,用户跟订单的关系通过一个List来表现
然后是po,我感觉po应该跟数据库表对应,这种一对多的关系,一般是在订单端加一个user_id,那么两个PO如下: public class UserInfoPO{ private String name; private String pwd; get...set... } public class OrderInfoPO{ private String name; private String userId; } 注意这里,订单类里有个userId,就不是正宗的OO思想了,但为什么这么做呢?因为要做持久化,即DAO里需要这个形式
DAO: pulic class UserInfoDAO(){ public void createUser(UserInfoPO user); } 这里DAO引用的是PO,而不是VO,因为这样写起sql等会比较简易,而且便于持久层与业务层的解耦
总结: 1 当一个类里出现诸如:pwd1,pwd2这种形式时,那么它是个form 2 当一个类里,持有一个对象,或聚集这样正统的OO关系时,它是个vo 3 当一个类里有relatedObjectId这样的字段时,它是个po
对于BO我暂时没什么理解
不知道我的想法是否正确,希望大家指正 :)
[该贴被anjxue于2008-05-15 11:47修改过]
|
|
|
|
|
|
回复:实例解析vo,bo,po,dao
|
2008年05月16日 08:34
|
|
|
不要管那么多O,都是从各种角度命名的,就像同一个东西不同地方俗语有不同称谓。
本质上要从领域模型这个称谓入手,搞清楚实体对象和值对象等概念,将对象命名概念统一到Evans DDD上来。
|
|
|
|
|
|
re:实例解析vo,bo,po,dao
|
2008年05月17日 12:57
|
|
|
我认为LZ你的FORM就是VO 其实我认为BO 即DOMAIN MODEL才是我们应该关注的重点
po最现实的意义是 用Hibernate查询 或者插入更新 返回值得时候用 人家帮你封装了 vo是为了po与页面的值不完全对应 vo是完全对应的
java莫法返回多参数嘛 而且就算能返回一个参数一个参数的返回也麻烦 当然封装了就更好 而且封装不仅是为了数据的封装 更重要是把事物抽象成一个model 有实际对应意义 不是随便去封装数据 所以现在无意义vo(只是对数据的封装)已经淘汰了
|
|
|
|
|
|
re:实例解析vo,bo,po,dao
|
2008年05月19日 13:48
|
|
|
如果FORM就是VO,那么VO里岂不是会出现pwd1,pwd2这样的情况? vo我感觉是各层拿来传值的 那么传值的时候该给这两个的哪个赋值呢? 感觉不对劲
|
|
|
|