如何打破设计中的循环依赖

时间:2016-02-13 16:06:13

标签: java cyclic-dependency

我正在寻找一个问题的设计解决方案,我有两个相互依赖的类,我有var props = MethodToGetTargetedProperties(); // props example content would be a list of strings like so "UserSomeObj", "UserSomeOtherObj" foreach (var prop in props) { var results = users.Select(x => x.GetPropertyValue(prop)).ToList(); //results contain lists of prop where count == 0 and i dont want them } class Customer其中:

class Order可以有一个订单列表(1到N),Customer有一个指定的客户(1对1)。

打破这种依赖关系的最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

假设您具有以下依赖关系:

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;
}

你可以创建第三个类来打破依赖:

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;
    }
}

现在您可以从Order类中删除订单,从Order类中删除客户。或者我误解了你的问题?

答案 1 :(得分:0)

作为一名软件工程师大约2年,在这种情况下,我见过的最好的情况是为一个类添加一个影子定义,而无需将其初始化为任何东西,只需告诉编译器“嘿命令存在”,然后显式定义另一个类,然后显式定义您的订单类。这样做能使您朝正确的方向前进吗?有时以这种方式对节点和树进行建模,并且数据结构和算法书籍的分析也倾向于对此具有合适的设计解决方案。