我试图理解DI和对象构造及其逻辑的分离,但在某些情况下我的实现存在问题。这是一个例子。
class A
{
public:
void load_bs(); // create some Bs and push them into bs_ vector
// and call load_cs on every created B
private:
std::vector<B> bs_;
};
class B // does not need A reference for real work
{
public:
void load_cs(); // create some Cs and push them into cs_ vector
private:
std::vector<C> cs_;
};
class C // needs A and B
{
public:
C(A &a, B &b) : a_(a), b_(b) {}
private:
A &a_;
B &b_;
};
如何根据DI构建此结构?首先我创建A类的实例,然后调用load_bs()方法并创建一些B对象,所以现在是时候在B实例中创建C对象了。因为我应该只向对象注入该对象所需的依赖关系,不仅要传递给另一个对象使用,在C创建过程中我在B中引用A?是否应该在其他地方创建C并传入B?
当我注入依赖项时,只注入其他东西,我得到的是真正的硬重构,当应该删除其中一个依赖项时,或者当我想在对象中添加一个真正高层次的对象时可用。