我正在努力想出一个在OO模型中添加双向关系的好方法.假设有一个客户可以下多个订单,也就是说客户和订单类之间存在一对多关联,需要在两个方向上遍历:对于特定客户,应该可以告诉所有订单他们已下订单,对于订单,应该可以告诉客户.
这是一段Java代码,虽然这个问题主要与语言无关:
class Customer {
private Set orders = new HashSet<Order> ();
public void placeOrder (Order o) {
orders.add(o);
o.setCustomer(this);
}
}
class Order {
private Customer customer;
public void setCustomer (Customer c) {
customer = c;
}
}
Run Code Online (Sandbox Code Playgroud)
让我感到困惑的是,鉴于模特有人可以轻易打电话:
o.setCustomer(c);
Run Code Online (Sandbox Code Playgroud)
而不是正确的
c.placeOrder(o);
Run Code Online (Sandbox Code Playgroud)
形成单向链路而不是双向链路.
仍在学习OOP,任何人都可以请求帮助解决这个问题的惯用和实用方法,而不诉诸"反思"或花哨的框架(无论如何都依赖于反思).
PS有一个类似的问题:在我的java模型中管理双向关联,但我觉得它不能回答我的请求.
PSS任何链接到在db4o之上实现业务模型的现实项目的源代码都非常感谢!