我们假设课程PersonList
的方法为AddNewPerson()
,它会在内部列表中创建并添加新的Person
。但是,Person
的构造函数需要几个参数(主要取决于它的接口)。这意味着PersonList
还需要将这些参数传递给其构造函数(或以某种方式提供)。
这种安排看起来像代码味道,因为PersonList
不直接使用任何这些依赖项。它只是将它们传递给另一个构造函数。我怎样才能重构这些类,以便明确每个类的真正依赖性是什么?
答案 0 :(得分:1)
“这意味着PersonList也需要具有这些参数 传递给它的构造函数(或以某种方式提供)。“
为什么会这样? PersonList
不必是Person
个对象的工厂,您可以将Person
直接传递给AddNewPerson
。
E.g。
public void AddNewPerson(Person person);
但是,如果您希望减轻客户端代码创建Person
个实例,同时又希望避免让PersonList
依赖于创建Person
s所需的内容那么你可以引入一个PersonFactory
来封装创建逻辑以及所需的依赖。
在这种情况下,客户可以使用PersonFactory
创建Person
并将其添加到列表中,或PersonList
可以取决于PersonFactory
。