我有一个类库来保存我的对象,以便:

xxxCommon \ Objects \ Customer.cs

    public class Customer
    {
        public string url { get; set; }
        public List<Telephone> telephones { get; set; }
    }


xxxData \ DC \ CustomerDC.cs(DataComponent)


此类调用许多proc并返回xxxCommon \ Objects中的对象


我现在的主要问题是循环引用,要进行“惰性”加载,我需要设置
电话归功于xxxData \ DC中的功能,如何避免这种情况?

最佳答案

解决循环依赖关系的一种方法是在两个程序集之间有一个层:

而不是这种情况;

组装模型:

public class Customer{
    //...
}


组装数据:

public class CustomerDAO{
    public Customer LoadCustomer(int id){
         return new Customer(id,...);
    }
}


模型装配引用数据装配,而数据无法返回到模型中以实例化客户。

您可以代替;

组装模型:

public class CustomerModel:Customer{}
public class ModelFactoryImp:ModelFactory{
    public Customer CreateCustomer(int id,//...customer params){
        return new CustomerModel(...);
    }
}


装配模型接口:

public abstract class Customer{//...}
public abstract ModelFactory{
    Customer CreateCustomer(int id,//...customer params);
}


组装数据:

public class CustomerDAO{
    private ModelFactory _modelFactory;

    public CustomerDAO(ModelFactory modelFactory){
         _modelFactory = modelFactory;
    }

    public Customer LoadCustomer(int id)
    {
        // Data Access Code
        return _modelFactory.CreateCustomer(id,//...cutomer params);
    }
}


在其中Model和Data程序集都依赖于ModelInterfaces层的情况下,您向Customer数据访问对象传递ModelFactory类的实现,以便它可以创建Customer。

09-17 15:59
查看更多