私は以下のことを耳にし、この声明を確認するよう求められました。
「SOLID/TDD は 1 つのインターフェースに対して 1 つの実装を推奨していますが、これは現実世界ではなく、インターフェースの要点に反しますよね?」
TDD と DI のすべてのオンライン例はすべて、実装が 1 つしかない典型的な IRepository/MyRepository の例に従っているので、最初は同意しました。さらに考えた後、私は同意しませんでした。
私がやろうとしているのは、そうでないことの証明と、1 つのインターフェイスの複数の実装が存在する可能性がある場所の例を提供し、DI の観点からそれがどのように機能するかを示すことです。
人々がこれで私を助けてくれることを望んでいました。
更新: DI と単体テストの概念は理解していますが、私が示そうとしているのは、1 つのインターフェイスを実装する運用環境で複数のクラスを使用する方法です。
UPDATE2:簡単な例を考えたので、複数の実装の可能な実装を次に示しますが、それでも私が望むものには実際には答えません。ILogger、IDataProvider、または ISomething に単一の依存関係を持つコンストラクターがある場合はどうなるでしょうか。
public interface ILogger
{
void Write(string data);
}
public class FileLogger : ILogger
{
void Write(string data)
{
//
}
}
public class DBLogger : ILogger
{
void Write(string data)
{
//
}
}
public class EventViewerLogger : ILogger
{
void Write(string data)
{
//
}
}
public class Calculator
{
private IEnumberable<ILogger> loggers;
public Calculator(IEnumberable<ILogger> loggers)
{
this.loggers = loggers;
}
public int Add(int a, int b)
{
var result = a + b;
foreach(var logger in loggers)
{
logger.Write("Result was " + logger);
}
}
}