Я изучаю принципы SOLID и задаю вопрос об управлении зависимостями по отношению к интерфейсам.
Пример из книги, которую я читаю (Adaptive Code via С# by Gary McLean Hall), показывает класс TradeProcessor, который будет получать торговые данные, обрабатывать их и хранить в базе данных. Данные торговли моделируются классом под названием TradeRecord. Класс TradeParser будет обрабатывать преобразование торговых данных, полученных в экземпляр TradeRecord. Класс TradeProcessor ссылается только на интерфейс ITradeParser так, чтобы он не зависел от реализации TradeParser.
Автор имеет метод Parse (в интерфейсе ITradeParser) возвращает коллекцию IEnumerable<TradeRecord>, которая содержит обработанные данные торговли. Не означает ли это, что ITradeParser теперь зависит от класса TradeRecord?
Не должен ли автор сделать что-то вроде создания интерфейса ITradeRecord и вернуть Parse коллекцию экземпляров ITradeRecord? Или я пропущу что-то важное?
Здесь код (реализация TradeRecord не имеет значения, поэтому он опущен):
TradeProcessor.cs
public class TradeProcessor
{
private readonly ITradeParser tradeParser;
public TradeProcessor(ITradeParser tradeParser)
{
this.tradeParser = tradeParser;
}
public void ProcessTrades()
{
IEnumerable<string> tradeData = "Simulated trade data..."
var trades = tradeParser.Parse(tradeData);
// Do something with the parsed data...
}
}
ITradeParser.cs
public interface ITradeParser
{
IEnumerable<TradeRecord> Parse(IEnumerable<string> tradeData);
}