Я изучаю принципы 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);
}