我正在练习依赖注入,有几个问题我不知道如何处理。
发布于 2014-03-26 07:28:30
A类可能依赖于3-4其他行为(接口).一方面,将它们全部传递到构造函数中会使对象更难创建和初始化。另一方面,在客户端忘记设置依赖项时,使用setter可能会有问题。什么是正确的方法来处理这件事?
没有完美的解决方案,所以你只需要调整口味。备选方案包括:
using/typedef对编译时依赖项进行分解( ala现代C++设计中的“策略”)对重复的代码进行一些想象和分析,有希望为您提供一种方法.
最终,必须在某个地方创建所有依赖项。如何防止一个类(例如,主类)中存在多个初始化的情况?
这是一个分解冗余依赖创建和访问对象的问题--您的选择是相似的--传递引用或指针,使用结构或容器或管理对象对它们进行分组和重新访问.
在进行依赖项注入时使用shared_ptr是否被认为是一种良好的实践?在这种情况下,依赖关系的创建者通常无法删除对象,所以使用共享指针对我来说是有意义的。
对于函数,客户端代码通常比被调用的函数的使用寿命长,因此不需要共享指针.参考资料是理想的。如果您使用线程,或者创建比客户端代码更有效的对象,那么共享指针就很有意义了。
发布于 2014-03-26 07:36:57
所有的个人意见,但我们要走了。
1)将依赖项传递给构造函数。如果存在合理的默认值,则提供多个构造函数或使用默认参数。
2)如果您要经常使用同一组依赖项,您可以通过创建一个“依赖集”类来保存一些类型,该类的实例可以传递给构造函数,如下所示:
struct Iface1;
struct Iface2; // Dependent interfaces
struct Iface3;
struct DependencySet
{
Iface1& iface1;
Iface2& iface2;
Iface3& iface3;
};
class Dependent
{
public:
Dependent(DependencySet& set)
: iface1(set.iface1)
, iface2(set.iface2)
, iface3(set.iface3)
{}
private:
Iface1& iface1;
Iface2& iface2;
Iface3& iface3;
};3)就我个人而言,我倾向于像上面那样使用引用并管理生命周期,这样依赖关系就会超过依赖类,但是如果您想要“忘记”一旦使用了依赖项,就可以使用共享指针。
https://stackoverflow.com/questions/22653907
复制相似问题