Я изо всех сил пытаюсь придумать хороший способ добавления двунаправленного отношения в OO-модели. Скажем, есть Клиент, который может разместить много ордеров, то есть существует связь "один-ко-многим" между классами Customer и Order, которые должны быть общими в обоих направлениях: для конкретного клиента должно быть возможно рассказать все заказы, которые они разместили, для заказа вы можете сообщить клиенту.
Вот фрагмент кода 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;
}
}
Что меня забивает, так это то, что с учетом модели кто-то может легко позвонить:
o.setCustomer(c);
вместо правильного
c.placeOrder(o);
образует однонаправленную ссылку вместо двунаправленной.
Все еще изучая ООП, кто-нибудь может помочь с тем, что было бы идиоматическим и практичным способом решения этой проблемы, не прибегая к "рефлексии" или фантазийным рамкам (которые в любом случае будут полагаться на размышления).
P.S. Существует аналогичный вопрос: Управление двунаправленными ассоциациями в моей модели java, однако я не чувствую, что это отвечает на мою просьбу.
P.S.S. Любые ссылки на исходный код реальных проектов, реализующих бизнес-модель на вершине db4o, очень ценятся!