如何打破设计中的循环依赖
How to Break Cyclic Dependencies in Design
我正在寻找问题的设计解决方案,我有 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;
}
您可以创建第三个 class 来打破依赖关系:
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;
}
}
现在您可以取消来自客户 class 的订单,以及来自订单 class 的客户。还是我误解了你的问题?
作为一名大约 2 年的软件工程师,对于这样的案例,我所见过的最好的方法是对一个 class 进行影子定义,而无需将其初始化为任何东西,只需告诉编译器“嘿订单存在”,然后明确定义另一个 class,然后明确定义您的订单 class。这会让你朝着正确的方向前进吗?节点和树有时以这种方式建模,数据结构和算法分析书籍也往往对此有不错的设计解决方案。
我正在寻找问题的设计解决方案,我有 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;
}
您可以创建第三个 class 来打破依赖关系:
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;
}
}
现在您可以取消来自客户 class 的订单,以及来自订单 class 的客户。还是我误解了你的问题?
作为一名大约 2 年的软件工程师,对于这样的案例,我所见过的最好的方法是对一个 class 进行影子定义,而无需将其初始化为任何东西,只需告诉编译器“嘿订单存在”,然后明确定义另一个 class,然后明确定义您的订单 class。这会让你朝着正确的方向前进吗?节点和树有时以这种方式建模,数据结构和算法分析书籍也往往对此有不错的设计解决方案。