я подслушал ниже и попросила подтвердить это заявление:SOLID/TDD поощряет один реализация для одного интерфейса
«SOLID/TDD поощряет один реализация для одного интерфейса, это не реальный мир, и идет вразрез с точкой интерфейсы не так ли? "
Я изначально согласился, что все онлайн-примеры TDD и DI следуют типичным примерам IRepository/MyRepository, где есть только одна реализация. После дальнейших размышлений я не согласился.
Что я пытаюсь сделать, это доказать, что это не так, а также пример того, где могут быть несколько реализаций одного интерфейса и показать, как это работает с точки зрения DI.
Я надеялся, что люди смогут мне помочь.
ОБНОВЛЕНИЕ: Хотя я понимаю концепции DI и модульного тестирования, то, что я пытаюсь показать, заключается в том, как мы можем иметь несколько классов в производстве, реализующих один интерфейс.
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);
}
}
}
по теме: http://stackoverflow.com/questions/5411648/how-to-deal-with-interface-overuse-in-tdd. При единичном тестировании в изоляции вы нередко оказываетесь в интерфейсе, который реализуется тестовым двойным и точно * одним * производственным классом. –
для меня это совсем не вопрос, мы создаем интерфейсы, ожидая, что может быть несколько реализаций ... вот что делает ваше приложение более гибким ... Я действительно не понимаю, почему вы этого не докажете. ..bottom line даже если вы находитесь в TDD/SOLID ... Цель использования интерфейса - указать контракт и который может быть реализован несколькими классами ... вместо этого пытается доказать это ... спросите у человека, который спросил вы, чтобы доказать это, чтобы освежить его/ее навыки объектно-ориентированного программирования ... – NiK