所以令我惊讶的是,在 google 和 stackoverflow 上进行搜索并没有返回更多结果。
在 OO 编程中(我使用的是 java),如何正确实现一对多关系?
我有一个类 Customer
和一个类 Job
。我的申请是针对一家为客户完成工作的虚构公司。我当前的实现是 Job
类与 Customer
类没有任何关系,根本没有对它的引用。 Customer
类使用集合和方法来保存、检索和修改有关已由客户分配和/或为客户完成的工作的信息。
问题是,如果我想知道为哪个客户完成了特定的Job
怎么办?我只找到了这篇相关的文章:http://www.ibm.com/developerworks/webservices/library/ws-tip-objrel3/index.html .
根据作者的实现,我会让 Job
构造函数接受一个 Customer
参数,并存储它以便我可以检索它。但是,我看不到这个模型可以一致的任何保证。没有限制将某项工作的相关客户设置为该工作不针对的客户,并向为其他人完成的客户添加工作。如有任何帮助,我们将不胜感激。
最佳答案
没有 100% 万无一失的方法来保持完整性。
通常采用的方法是用一种方法构造关系,用同样的方法构造另一个方向。但是,正如您所说,这并不能阻止任何人弄乱它。
下一步将是使一些方法包可访问,这样至少与您的方法无关的代码不会破坏它:
class Parent {
private Collection<Child> children;
//note the default accessibility modifiers
void addChild(Child) {
children.add(child);
}
void removeChild(Child) {
children.remove(child);
}
}
class Child {
private Parent parent;
public void setParent(Parent parent){
if (this.parent != null)
this.parent.removeChild(this);
this.parent = parent;
this.parent.addChild(this);
}
}
实际上,您不会经常在类(class)中模拟这种关系。相反,您将在某种存储库中查找父项的所有子项。
关于java - 编程一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10086529/