管理我的java模型中的双向关联

Dam*_*ian 3 java

我有一个java模型,其中类具有关联(1到1,1到n,n到n),它们应该在两个方向上都有效.

示例:A类具有B类的集合

B的所有实例必须知道他们的父母(A)是谁.如果我更改了B的父属性,则还需要在另一方更新关联.

我认为,编写代码可以使关联在两端保持最新是非常繁琐和错误的.

那么:有更好的方法吗?是否有一个java库可以管理两个对象之间的双向关联?

PSp*_*eed 5

另一种方法是将关系移出有问题的对象.很多时候A和B都不需要彼此了解; 使用代码可以方便地找到这些属性.这是图表或双向地图可以发挥作用的地方.

双向映射可以简单地用于跟踪一对一的关系.图表可以更好地跟踪其他类型的基数(多对一,多对多等)

有两种不同的图形实现可以帮助实现这一目标.我听说但从未使用过JGraphT,而且我使用了很多名为plexus(与IOC容器无关). 分别是http://jgrapht.sourceforge.net/http://plexus.sf.net/.

图形很好,因为它允许完全灵活地定义不同关系的方式,并隐式维护双向链接.

关系双方需要保持同步的事实通常表明关系本身对端点同等重要,而不是每一方都应该试图封装的东西.

不过,如果父母和孩子真的需要在对方工作后,一个办法是找出哪些是主要的,是否所有操作都可以通过这个对象来完成.因此,例如,在父子关系中,可以对父进行子操作,父进程在该操作期间向子进程传递对其自身的引用.我认为如果你不能那么这是一个很好的指标,有些线需要在设计中重新绘制.

再次使用父子示例,我还没有真正发现父 - >子和子 - >父关系是如此动态以至于一端无法控制它的情况.99%的时间我保持从次要到初级的反向引用,这是为了方便,并且关系的生命周期已经确立.

...否则,我使用图表.