私は、お互いに依存している2つのクラスがあり、どこにあるのかという問題の設計ソリューションを探していclass Customer
ますclass Order
:
Customer
は注文のリスト (1 対 N) を持つことができOrder
、指定された顧客 (1 対 1) を持ちます。
この種の依存関係を解消するためのベスト プラクティスは何ですか?
私は、お互いに依存している2つのクラスがあり、どこにあるのかという問題の設計ソリューションを探していclass Customer
ますclass Order
:
Customer
は注文のリスト (1 対 N) を持つことができOrder
、指定された顧客 (1 対 1) を持ちます。
この種の依存関係を解消するためのベスト プラクティスは何ですか?
次のような依存関係があるとします。
public class Customer {
private long customerId;
private String name;
private String address1;
// ....
private List<Order> orders;
}
public class Order {
private long orderNumber;
private Date orderDate;
// ... others
private Customer customer;
}
依存関係を壊すために 3 番目のクラスを作成できます。
public class CustomerOrder {
private final Customer customer;
private final List<Order> orders;
public CustomerOrder(Customer customer) {
super();
this.customer = customer;
this.orders = new ArrayList<Order>();
}
public void addOrder(Order order) {
orders.add(order);
}
public Customer getCustomer() {
return customer;
}
public List<Order> getOrders() {
return orders;
}
}
これで、Customer クラスから注文を削除し、Order クラスから顧客を削除できます。それとも私はあなたの問題を誤解していますか?
約 2 年間のソフトウェア エンジニアとして、私がそのようなケースで見た中で最も良いのは、1 つのクラスのシャドウ定義を配置し、何も初期化せずに、単にコンパイラに「注文が存在します」と伝え、次に他のクラスを定義することです。クラスを明示的に指定し、その後に注文クラスを明示的に指定します。それはあなたを正しい方向に導きますか?ノードとツリーはこのようにモデル化されることがあり、データ構造とアルゴリズムの分析に関する書籍には、これに対する適切な設計ソリューションが含まれている傾向があります。