私はコードをデカップリングしようとしています。代わりにシングルトンを使用するのではなく、私はインターフェイスで依存性注入を使いたいと思っています。ここまでは順調ですね。私が依存しているクラスのインターフェースに対して、すべてのタイプを汎用にする必要がありますか?
ここでは、このメソッドの引数または戻り値の型として他のネットワーククラスを使用する、この大きなネットワーククラスがあります。たとえば:
public class Network
{
void OnServerError(NetworkConnection conection, int errorCode);
}
public class NetworkConnection
{
public NetworkError lastError { get; }
}
public class NetworkError
{
public string Error { get; private set; }
}
- も、ネットワーククラスのためのインターフェイスを作成する意味がありますか?
- もしそうなら、すべてのタイプを一般化する必要がありますか?パブリックメソッドを持つクラスの型については、そのためのインタフェースも作成する必要がありますか?基本的には、すべてがインタフェースかジェネリック型のどちらかになるまで、クラスの中で深く進んでいきますか?
- このクラスのインターフェイスを作成したい理由の1つは、将来別のネットワークライブラリに切り替えることができ、私の初期インターフェイスには同じ署名が付いていても、どこでもすべてをリファクタリングしたくないということです私の既存のネットワーキングクラスのほとんどは、将来的にはリファクタリングする必要があります。私は何が欠けていますか?
本当の質問は、あなたの 'Network'クラスが他のクラスにも注入されるかどうかです。もしそうなら、役に立つかもしれません。 Glennの答えが指摘するように、インターフェイスはDIでは必須ではなく、単なる便利なものです。本当の答えはあなた次第ですが、それはあなたの必要条件になります。あなたはコンストラクタやプロパティの注入のために行くのですか?どのコンテナを使用していますか? – Clint