关于c++中依赖注入的几个问题
Several questions regarding Dependency Injection in C++
我正在实践依赖注入,有几个问题,我不确定如何处理它们。
-
A类可能依赖于3-4个其他行为(接口)。一方面,在构造函数中传递所有这些变量会使对象更难创建和初始化。另一方面,如果客户端忘记设置某个依赖项,使用setter可能会有问题。正确的处理方法是什么?
-
最终,所有的依赖必须在某个地方创建。我如何防止在一个类(例如,主类)中有许多初始化的情况?
-
是否认为在进行依赖注入时使用shared_ptr是一种良好的实践?在这种情况下,依赖的创建者通常不能删除对象,所以使用共享指针对我来说是有意义的。
类A可能依赖于3-4个其他行为(接口)。一方面,在构造函数中传递所有这些变量会使对象更难创建和初始化。另一方面,如果客户端忘记设置某个依赖项,使用setter可能会有问题。正确的处理方法是什么?
没有完美的解决方案,所以你必须调整自己的口味。选项包括:
-
让/a构造函数接受对注入对象进行分组的结构(如果你将同一组依赖项传递给多个构造函数)
-
在运行时和编译时之间划分依赖关系,并使用派生/
using
/typedef
("Policies"ala Modern c++ Design by Alexandrescu)来考虑编译时依赖关系 -
为部分/所有依赖提供默认值,或者提供一些动态查找"服务",它仍然允许你修改注入,但在多个依赖对象结构中持续存在
对您的重复代码进行一点想象和分析,希望能为您提供一个方法....
最终,所有的依赖必须在某处创建。我如何防止在一个类(例如,主类)中有许多初始化的情况?
这是一个分解冗余依赖创建和对象访问的问题——你的选择是类似的——传递引用或指针,使用结构体或容器或管理对象对它们进行分组并重新访问它们....
在进行依赖注入时使用shared_ptr是否被认为是一种良好的实践?在这种情况下,依赖的创建者通常不能删除对象,所以对我来说,使用共享指针是有意义的。
对于函数来说,客户端代码通常比被调用的函数的使用寿命更长,所以不需要共享指针…推荐信是最理想的。如果您正在使用线程,或者创建比客户端代码更长寿的对象,那么共享指针就很有意义。
这些都是我个人的意见,不过就这样吧。
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;
};
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 关于 std::bitset 构造函数的几个问题?
- 分发我自己的程序的几个问题
- 关于Qt的几个问题
- 关于SDL_Window和unique_ptr的几个问题
- 关于C++内联函数的几个问题
- 我正在尝试[C++]练习多态性和OOD原则。需要指导和几个问题的答案
- 关于C++中数组的几个问题
- 我是C++新手,我有几个问题想问
- C++ - 关于引发异常的几个问题
- 选择-几个问题
- 在Windows上编译和运行示例c++程序的几个问题
- ReadFileEx,可变长度-几个问题
- c++中虚方法表的几个问题
- 关于评价顺序和比较的几个问题
- 关于类成员指针的几个问题
- 模板类——几个问题
- Qt(C++)的几个问题
- QtCreator的几个问题
- 关于c++中依赖注入的几个问题