浏览 7931 次
锁定老帖子 主题:关于PO与VO转换.
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-07-24
疑点: PO是Hibernate管理的Entity类的对象. VO是业务层为了完成业务操作而需要的对象. 1:PO与VO应该是一个类的两个对象吗? 2:如果PO与VO是两个类的分别的两个对象.它们之间的转是怎么转的. 我想到的一个方法就是属性值的拷贝.当PO中有另一个Entity对象的成员变量时,深层拷贝.把Entity类型的成员变 量也转成对应的VO类的对象.如果PO中有另一个Entity对象的列表时就更麻烦了.继续copy. <<Thing in UML>>(第一版)334页这样说: Value Object 是由Hibernate PO复合而成的一个POJO对象.针对特定的业务需求而设计.一个VO由多个PO组成, 并可通过VO的getter和setter访问实际PO的值.VO是Entity,BusinessControl和Web层之间的标准传输格式. 我分析: 为什么能过VO的getter和setter可以访问实际PO的值.只有一种方法:PO是VO的成员变量,类似于策略模式. 代码: //下面两个类的Entity类,持久化到数据库的(先不要考虑它们是合关系合理) class Forum{ String name = "iteye"; Integer age = 10; } class Address( String city = "中国"; ) //下面是VO对象的java 类. class WebSite{ Forum f = null; Address a = null; public WebSite(Forum _f, Address _a){ f = _f; a = _a; } public String getName(){ return f.getName(); } public void setName(String name){ f.setName(name); } public Integer getAge(){ return f.getAge(); } public void setAge(Integer age){ f.setAge(age); } public String getAddress(){ return a.getAddress(); } public void setAddress(String address){ a.setAddress(address); } //为客户端代码,提供取成员变量的方法.如果是只让EntityControl可以存取.并且EntityControl与WebSite //在同一个包中则把下面的方法设置为package访问权限(我认为是这样,不可能让表示层的代码访问下面的方 //法,我现在先把它们设置为public方法). public Forum getForum(){ return f; } public Address getAddress(){ return a; } } ########################################代码完########################################### 小弟正在迷惑中,请高手指路. 谢谢!!! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-07-24
这代码怎么发进来格式这么乱呀.
这个论坛怎么查询我对别人的文章的评论呀? |
|
返回顶楼 | |
发表时间:2012-07-25
PO = Persistent Object
VO = Value Object PO是说这个对象是用来持久化的,它是相对与不能持久化的对象而言的。Value Object是DDD中一个术语,是相对于entity提出的概念,vo和entity都代表领域中的对象,但是entity更关注于其标识,value object则更关注于其值。 换句话说,同一个对象既可以是PO,也可以是VO,也可以是PO+VO,也可以什么都不是。这要看设计者的意图,以及从哪个角度去看了。就像男人老人的概念一样,是从不同的角度看问题。 |
|
返回顶楼 | |
发表时间:2012-07-25
letmedown 写道 这代码怎么发进来格式这么乱呀.
这个论坛怎么查询我对别人的文章的评论呀? 您好,您在编辑代码的时候可以使用工具栏上方的Code,这样可以调整代码格式。 如果您需要查询博客的评论,可以在“我的博客”—“评论管理”里面查询评论。 |
|
返回顶楼 | |
发表时间:2012-07-25
查询条件 start date / end date 这两个属性
在PO中没有 所以VO一般是继承PO加点数据库不记的数据.... |
|
返回顶楼 | |
发表时间:2012-07-27
抛出异常的爱 写道 查询条件 start date / end date 这两个属性
在PO中没有 所以VO一般是继承PO加点数据库不记的数据.... 嗯 我的看法其实 vo和po可以同一个 entity 对象来表示。 其实大部分 业务 vo 都是多余的。只不过涉及到个别的业务才会有这样的VO |
|
返回顶楼 | |
发表时间:2012-07-27
ITeye管理员 写道 letmedown 写道 这代码怎么发进来格式这么乱呀.
这个论坛怎么查询我对别人的文章的评论呀? 您好,您在编辑代码的时候可以使用工具栏上方的Code,这样可以调整代码格式。 如果您需要查询博客的评论,可以在“我的博客”—“评论管理”里面查询评论。 谢谢你的回复. 我对一个人的博客中的一个文章进行了评论.好像从---“我的博客”—“评论管理”里面查询评论--中查不到. 只是那个博主对的我评论回复了之后我就可以在---"我的应用"->"我的消息"中可以看到--.如果博主不回复 好像还真看不到我对他的博客中的文章进行了评论. 关于Entity,PO, VO这些东东,我现在认为理解的就这样吧. 以后等到水平再高点,回头再来想. 系统的设计还是以实用为主,能解决实际问题就OK.不要为了技术而技术,是吧. 总结: 谢谢大家的帮助. |
|
返回顶楼 | |
发表时间:2012-07-27
我感觉除了vo po pojo do dto 等概念大家需要了解外,在项目架构设计中不要太纠结于这些。
目前我们的项目更多的强调敏捷框架,只用domain model 与持久层及表现层打交道。 至于脏数据之类的问题,自然有相应的解决方法。 |
|
返回顶楼 | |