Я пытаюсь применить принципы внедрения зависимостей , и у меня возникают некоторые трудности с этим.
У меня есть функция, которая периодически отправляется в мою базу данных, извлекает список продуктов, а затем запускает ряд тестов для этих продуктов, чтобы определить их безопасность.
Если один или несколько продуктов признаны небезопасными, мне нужно отправить отзыв, создав экземпляр и отправив объект ProductRecall
.
Функция выглядит примерно так: (псевдокод)
void SafteyInspector::CheckProductSaftey()
{
database.getProducts( list_of_products )
foreach( list_of_products as p )
{
if ( !runBatteryOfTests( p ) )
unsafe_products.insert( p );
}
if ( !unsafe_products.empty() )
{
ProductRecall * recall =
new ProductRecall( unsafe_products ); // Oh no!
recall->dispatch();
}
}
Проблема в том, что я "новичок" - объект ProductRecall
прямо в середине моего графа вызовов. Это нарушает принципы внедрения зависимости. Как написано, я не могу протестировать CheckProductSaftey()
без создания ProductRecall
объекта.
Однако я не могу передать объект ProductRecall
в мой объект SafetyInspector
, потому что SafetyInspector
- это тот, кто определяет список небезопасных продуктов.
Я использую конструктор-инъекцию для всего, и я бы хотел продолжить. Также обратите внимание, что я могу в любой момент выдать несколько ProductRecalls
, поэтому я не могу просто передать один ProductRecall
объект в SafetyInspector
при создании.
Есть предложения? Спасибо!