9

RAII (Resource Acquisition Is Initialization) 是建议的构造对象的方法之一。它与单元测试原则有什么关系:在构造函数中没有完成复杂的工作?尤其是“新”运算符没有明确创建对象?然而,某些对象的创建有时需要一些更复杂的步骤,并且将工厂传递给构造函数会使 API 变得“脏”,这意味着降低了易读性。同时满足这两个原则的一般方法是什么?

我在 SO 上找到了另一个主题:堆栈分配的 RAII 对象与 DI 原则,但是它看起来像一个更普遍的问题,并且没有得到很好的解释。

4

1 回答 1

7

是的,在构造函数中创建一个具体的类会使这样做的类复杂化,给类添加一个依赖项,并使其更难测试。

但是,RAII 不是一种构造对象的方式,而是一种释放资源的方式。析构函数释放资源的类不必构造对象,尽管它通常这样做:请参阅资源获取是什么意思是初始化 (RAII)?.

所以,如果你愿意,可以在使用它的类之外创建资源,如果你愿意,可以使用工厂来做,等等,然后让使用资源的类用 RAII 清理它。

于 2014-05-03T01:54:31.937 回答