JiveJdon Community Forums
在线583人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » 开源项目大家谈
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 4 回复 / 1
 发表新帖子   回复该主题贴
gltbeyond

悄悄话
发表文章: 35
注册时间: 2007年04月05日 22:59
db4o使用小结 2008年06月04日 19:26 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表 db4o(10)     
实现一个小项目-- 拼餐计费系统

经历了近3周的反复,由于一开始,对象间更新关联关于复杂,导致set时对象重复存放。究其原因是,对象的关系设计混乱,set时犹如一大串珠子,没有抓住主线。

总结一下:

1. 时刻注意内存中的对象和数据库中的对象是否保持一致。

2. 对象间引用不要过多,避免环状引用。这点在初次设计class时,时常犯的错误,一直想这样关联起来才方便。其实对象间关系越简单越好。

3. 注意对象的List集合属性,在存储是,如果没有自动存入,不妨试试专门对此属性进行set,毕竟List也是个对象?? 我目前是这样解决的。


欢迎提出意见。


项目的源代码已经贴出,供交流学习:

http://www.jdon.com/jivejdon/forum/messageList.shtml?thread=34147&message=23115033#23115033
gltbeyond

悄悄话
发表文章: 35
注册时间: 2007年04月05日 22:59
回复:db4o使用小结 2008年06月04日 21:00 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
补充:

例如: Diner--Account--Purchase
--Deposit

1. 分析这四个对象,Diner是比较稳定不变的,适合做一串珠子的头。
2. Account中有List purchaseList; List depositList 分别指向Purchase,Deposit. 当给对应diner的account增加purchase后,这个过程应该更新account的对象,进行结算余额等。此时的存储应该这样:set(account); set(purchaseList); 就可以达到目的了。
如果只是set(diner); 没有任何效果,因为diner在内存没有变化,不要指望自动update account.
另外由于List的特点,必须set(purchaseList).

3. 使用db4o , 终于发现内存中的对象原来是这样的。。 进一步学习使用中。
4. db4o适合小项目 。
banq

悄悄话
发表文章: 9482
注册时间: 2002年08月03日 17:08
回复:db4o使用小结 2008年06月06日 10:10 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
多谢共享。

使用对象数据库,功底就在对象掌握能力上了。

>时刻注意内存中的对象和数据库中的对象是否保持一致。
这个问题很重要,很琐碎,但是要时刻留意,不过框架本身应该能够处理,Hibernate JPA等都封装起来处理得不错,db4o也不应该有差错出现,但是从我个人Jdon框架开发和应用经验来看:无论框架做得如何好,只有自己直接参与内存对象和数据库对象一致,性能才最高,Jdon框架就是走的这条路。

>对象间引用不要过多,避免环状引用。
这才是最重要的,这个现象必须依靠对象的源头OO分析如Evans DDD来解决,而不是在对象设计层面。好的建模分析根本不会导致环状引用,因为现实生活中不存在猫追尾巴的现象。

freebox

悄悄话
发表文章: 279
注册时间: 2008年03月01日 01:08
re:db4o使用小结 2008年06月06日 19:01 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
据本人养猫经验,我养的猫是不追尾巴的,不知其它猫如何。
批量时效果如何?是否需要先载入再更新持久?毕竟有的东西不能都放进缓存
gltbeyond

悄悄话
发表文章: 35
注册时间: 2007年04月05日 22:59
re:db4o使用小结 2008年06月16日 22:14 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
再次总结下。

1. 这几天折腾db4o更新对象,因为对象设计的较多,在一个事务中ObjectContainer使用了多个,导致第一个ObjectContainer查询出来的对象,随后更改后,在另外一个ObjectContainer。set()时候,发现对象重复存放了! 这其实就是因为ObjectContainer是维持事务的原因。所以同一个请求,同一个事务,务必在一个ObjectContainer下完成。

2. 面向对象的数据库,需要DDD,MDD先行,对对象的理解,对象间关联的管理尤其重要。
这个主题有 4 回复 / 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