我正在尝试练习Dependency Injection 的原则,但我在这样做时遇到了一些困难。
我有一个函数可以定期访问我的数据库,检索产品列表,然后针对这些产品运行一系列测试以确定它们的安全性。
如果发现一种或多种产品不安全,我需要通过实例化和调度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
at 构造。
有什么建议么?谢谢!