モデルと実装を可能な限り緩く結合しようとしている状況がありますが、結合が必要以上に近づく可能性があるという状況に直面しています。
私は「モデル」クラスの選択を持っており、すべてがインターフェースを実装しています。さらに、「データアクセス」クラスがあります。このクラスは、整数のルックアップ値を完全な「オブジェクト」表現にデコードする関数を提供します。
モデルクラス内で、モデルがデータアクセスクラスについて知る必要なしに、これらのデコードされた値へのアクセスを提供したいと思います。
簡単な例は次のとおりです。
/// Core classes --
class Car : ICar
{
public int MakeId { get {...} set { ... } }
public IMakeInfo Make { get {...} }
public string Registration { get { ... } set { ... } }
public int CurrentOwnerId { get { ... } set { ... } }
public IPerson CurrentOwner { get { ... } }
}
class MakeInfo : IMakeInfo
{
public string Name { ... }
public int Id { ... }
public decimal Weight { ... }
// etc etc
}
/// Data Access Classes --
class ResolveMake
{
public IMakeInfo GetMakeInfo(int id)
{
// Implementation here...
}
}
クラスがResolveMakeクラスを直接認識せずに、消費するクラスにオブジェクトをCar
提供できるようにするにはどうすればよいですか?IMakeInfo
実際のインスタンスでは、Carクラスを操作していますが、ResolveMakeクラスと同じ名前空間になく、そのインスタンスへの参照は含まれていません。
私のオプションのいくつか:
- メソッド
Car
のインスタンスを提供できるデリゲートを実装します。GetMakeInfo
- ある種の依存性注入
- CarをResolveMakeに緊密に結合し、それで完了します。
- 他のオプションはありますか?
どんな提案も歓迎します!