依赖注入:从注入的对象创建对象是否可以?

时间:2014-03-14 21:49:03

标签: dependency-injection inversion-of-control

我正在尝试使用Depenceny Injection模式。这个问题是关于“不要撒谎API”并传递给类所需的构造函数一切。

我正在重构一些旧代码,我发现在构造函数中实例化了一个对象,然后从该对象创建了另一个对象,并且它们都存储在要实例化的对象中。

这是python,但这个概念是不可知的。

class Element(object):

    def __init__(self):
        self._node = NodePath(...)
        self._subnode = self._node.attachNewNode('blablabla')

因此,显然必须注入第一个NodePath实例,但是通过在第一个节点上调用方法attachNewNode创建的子节点呢?是否应该注射?

这只是注入主节点:

class Element(object):

    def __init__(self, node):
        self._node = node
        self._subnode = self._node.attachNewNode('blablabla')

这会注入两个节点:

class Element(object):

    def __init__(self, node, subnode):
        self._node = node
        self._subnode = subnode

从可测试性来看,第二个明显更好,但如果我继续这样做,我的构造函数会变得有点麻烦,我觉得它可能不对。

提前致谢

1 个答案:

答案 0 :(得分:1)

这取决于node的性质,但是,如果暂时我们假设没有漏洞抽象和适当的封装,那么attachNewNode方法looks like会产生副作用自由功能。

如果是这种情况,在构造函数中调用attachNewNode只是一种缓存形式。从基本正确性的角度来看,你也可以不这样做,但是当你需要它时而不是在构造函数中调用

但是,一般来说,你是shouldn't call methods on your dependencies during construction