私はデータモデルとして機能するクラスを持っています。私はこれを次のように単純化します:カプセル化と依存性注入の混合
public class DataModel
{
public bool IsDataModelActive {get; internal set;}
}
私のDLLを使用するプログラマは、何かを壊す危険性なしに必要なものだけを見るでしょう。
フリップサイドでは、DataModel
を使用するクラスでDIを使用したいと思います。だから私は、インターフェイスを作成する必要があります。
public interface IDataModel
{
bool IsDataModelActive {get;}
}
をそして私は、私のクラスでこれを挿入します。この場合
public class Class1
{
IDataModel dataModel;
public Class1(IDataModel dataModel)
{
this.dataModel = dataModel
}
}
私はdataModel.IsDataModelActiveのセッターにアクセスすることは不可能です。
私が見つけた最高のパッチは、注射を受けた後にキャストすることです:
public class Class1
{
DataModel dataModel;
public Class1(IDataModel dataModel)
{
this.dataModel = (DataModel)dataModel
}
}
これは、ユニットテストのために役立ちますが、それは一種のDIの全体概念を破ります。 IDataModel
を実装する別のクラスがある場合はどうなりますか?
どのような戦略を使いますか?
それは感覚を作るでしょう。だから私は自分のセッターを世界に公開するか、DIを使わないかを選択する必要があります。それは残念です! – Mathieu
それとも私の側にはちょうど良いデザインですか? – Mathieu
ちょうど悪いデザイン(たぶん違反しない)。 'IsDataModelActive'が真であるか偽であるべきかを定義するものは何ですか? –