一種方法是在你的兩個組件之間的層:
不是這種情況相反;
裝配模型:
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