如何重构构造函数以使其真正的依赖关系清晰?

时间:2017-01-23 18:26:51

标签: oop dependency-injection constructor refactoring

我们假设课程PersonList的方法为AddNewPerson(),它会在内部列表中创建并添加新的Person。但是,Person的构造函数需要几个参数(主要取决于它的接口)。这意味着PersonList还需要将这些参数传递给构造函数(或以某种方式提供)。

这种安排看起来像代码味道,因为PersonList不直接使用任何这些依赖项。它只是将它们传递给另一个构造函数。我怎样才能重构这些类,以便明确每个类的真正依赖性是什么?

1 个答案:

答案 0 :(得分:1)

  

“这意味着PersonList也需要具有这些参数   传递给它的构造函数(或以某种方式提供)。“

为什么会这样? PersonList不必是Person个对象的工厂,您可以将Person直接传递给AddNewPerson

E.g。

public void AddNewPerson(Person person);

但是,如果您希望减轻客户端代码创建Person个实例,同时又希望避免让PersonList依赖于创建Person s所需的内容那么你可以引入一个PersonFactory来封装创建逻辑以及所需的依赖。

在这种情况下,客户可以使用PersonFactory创建Person并将其添加到列表中,或PersonList可以取决于PersonFactory