发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA
1 2 3 下一页 Go 3

一个对象多处引用的维护问题

              
2008-09-08 13:33
赞助商链接

我想大家在应用开发的时候都有过这种经历 。

一个对象在a处创建了,但b处又需要引用它。这样就有了两个引用
当在a处删除的时候 ,希望在b处也删除它;如果系统稍大的时候,可能多次引用的次数会更加多,一一删除很繁琐。 有没有办法一处删除 ,别处也同时删除,至少把引用置为null,下次能识别出来。

一般情况下,可以用工厂方式,不在多地保持该对象的应用. 只保留一处, 其它地方都从该地获得.
但我们这个系统前期是一家高校的老师开发的,id号是id1、id2...这样连续的,id2删除,id3补到id2。对象连个唯一的标识都没有。

用工厂模式也不知道怎么定位对象?


2008-09-09 09:54

其实这个问题的本质就是Evans DDD中的领域对象生命周期问题,通过工厂和Rep保证领域对象和其内嵌聚合子对象的一致性,或者称不变性。

这种删除等操作级联方式,象Hibernate等ORM框架都提供了这样的功能,所以,这也是使用这些框架的一个大优点。

如果自己使用JDBC实现,就比较麻烦,而且还要注意扩展性,以后再多一个子对象,还要改动一次,不象hibernate等配置或注解一下就可以。

至于象你这个系统,可以直白说:没有办法了,因为开始设计时就不对,这也是软件设计要讲科学的原因。

如果不是领域对象,而是一些功能类,那么可以考虑IOC/DI这样自动autowiring方式来实现。

2008-09-16 16:41

这两天仔细修改了,给每个对象添加了唯一不变的globalId。取得对象引用的时候都用get(String globalId),只在一个地方保留引用,别的地方只记录globalId。当get(globalId)返回为空就清除之。

有些人的习惯是一个对象保持多处引用,这种方式虽然运行效率高些,但维护会很麻烦。

如果只在一处保留引用,别处只保留globalId,用get方法或者工厂返回引用,返回后的引用不保留,用完就扔。 这种方式扩展性较好

2008-09-21 18:37

在多线程那本书里介绍了一种安全拷贝的方法,每次传递引用的时候将上一个引用删除掉,这样保证对象象接力棒一样同时只能有一个引用,一般情况下没问题,除非多线程并发访问,只有在多线程的环境里才允许有多个引用

2008-09-21 21:56

楼上其实是说明了一个原理,就是尽量不要多处引用(80%的情况下是不需要的),如果必须需要,应当遵循谁产生谁管理的原则。

3Go 1 2 3 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系反馈 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com