循環依存関係を解決する 1 つの方法は、2 つのアセンブリの間にレイヤーを配置することです。
このシナリオではなく。
組立モデル:
public class Customer{
//...
}
組立データ:
public class CustomerDAO{
public Customer LoadCustomer(int id){
return new Customer(id,...);
}
}
Model アセンブリが Data アセンブリを参照し、Data が Model に戻って Customer をインスタンス化できない場合。
代わりに持つことができます。
組立モデル:
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);
}
}
モデル アセンブリとデータ アセンブリの両方が ModelInterfaces レイヤーに依存し、Customer データ アクセス オブジェクトに ModelFactory クラスの実装を渡して、Customers を作成できるようにします。