我认为“在构造函数中工作”是可以的…
…只要您不违反单一责任原则(SRP)并坚持使用依赖注入(DI)即可。
我最近一直在问自己这个问题。我发现反对在构造函数中进行工作的动机是:
- 很难测试
- 我看到的所有示例都是没有使用DI的地方。这实际上不是构造函数进行实际工作的错误。
- 您可能不需要构造函数计算出的所有结果,从而浪费了处理时间,并且很难单独进行测试。
- 这基本上是对SRP的违反,不是构造函数每个人所做的工作的错。
- 旧的编译器在构造函数中引发异常时遇到麻烦,因此除了在构造函数中分配字段外,您不应该做任何其他事情。
- 我认为考虑到编译器的历史缺陷,编写新代码不是一个好主意。如果我们这样做的话,我们最好也不要使用C ++ 11。
我的看法是…
…如果您的构造函数需要进行一些工作以使其遵守资源获取初始化(RAII),并且该类不违反SRP,并且可以正确使用DI;那么在构造函数中进行工作就可以了!如果您想防止使用初始化完全失败的类对象,而不是依赖用户检查某些返回值,甚至可以引发异常。



