一种方法是在你的两个组件之间的层:
不是这种情况相反;
装配模型:
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(...);
}
}
大会ModelInterfaces:
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);
}
}
如果双方模型和数据组件依赖于ModelInterfaces层上和你通过客户数据访问对象ModelFactory类的实现,以便i t可以创建客户。
如果您面临解决循环依赖的困难任务,这是一个好方法,但不应该是一个好的设计首先消除这种依赖。 – 2011-05-03 06:15:29
所有设计都是妥协,在任何复杂系统中,您都会发现需要组件之间进行双向通信的区域。函数式编程提供了许多工具,例如回调,延续和闭包。这个问题的另一个多功能和通用的解决方案是事件处理程序;下层提供事件处理程序并引发事件,而上层则注册事件处理程序以接收通知。 (在.NET中查看INotifyPropertyChanged是一个很好的例子。)依赖注入为解决依赖性问题提供了另一种方法。 – 2011-05-03 11:18:35