JiveJdon Community Forums
在线380人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 3 回复 / 1
 发表新帖子   回复该主题贴
anjxue

悄悄话
发表文章: 2
注册时间: 2008年05月15日 11:15
实例解析vo,bo,po,dao 2008年05月15日 11:46 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表 模型(35)      dao(31)      值对象(22)      实体(16)     
首先说明我是个新手,这些概念我接触不久,我把我的想法提出来,希望大家指正
比如说一个系统设计到两个概念:“用户”、“订单”
用户跟订单是一对多关系,这里就不讨论权限(角色)那些概念了。

首先在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修改过]
banq

悄悄话
发表文章: 9482
注册时间: 2002年08月03日 17:08
回复:实例解析vo,bo,po,dao 2008年05月16日 08:34 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
不要管那么多O,都是从各种角度命名的,就像同一个东西不同地方俗语有不同称谓。

本质上要从领域模型这个称谓入手,搞清楚实体对象和值对象等概念,将对象命名概念统一到Evans DDD上来。
fw2003

悄悄话
发表文章: 12
注册时间: 2007年05月23日 08:57
re:实例解析vo,bo,po,dao 2008年05月17日 12:57 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
我认为LZ你的FORM就是VO 其实我认为BO 即DOMAIN MODEL才是我们应该关注的重点

po最现实的意义是 用Hibernate查询 或者插入更新 返回值得时候用 人家帮你封装了 vo是为了po与页面的值不完全对应 vo是完全对应的

java莫法返回多参数嘛 而且就算能返回一个参数一个参数的返回也麻烦 当然封装了就更好 而且封装不仅是为了数据的封装 更重要是把事物抽象成一个model 有实际对应意义 不是随便去封装数据 所以现在无意义vo(只是对数据的封装)已经淘汰了
anjxue

悄悄话
发表文章: 2
注册时间: 2008年05月15日 11:15
re:实例解析vo,bo,po,dao 2008年05月19日 13:48 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
如果FORM就是VO,那么VO里岂不是会出现pwd1,pwd2这样的情况?
vo我感觉是各层拿来传值的
那么传值的时候该给这两个的哪个赋值呢?
感觉不对劲
这个主题有 3 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
正在读取,请等待...
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
  发贴前查询 标签列表勿重复发表问题

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com
anti spam