2013-07-28 49 views
2

从设计角度来看,什么时候最好删除方法参数,而是使用构造函数参数,而方法可以使用已经初始化为构造函数参数的类变量?构造函数参数或方法参数?

+1

向我们展示一个具体的例子,你问自己这样一个问题。使用构造函数参数来初始化对象的状态。使用方法参数将输入传递给对象的特定方法。 –

+0

这是一个通用设计问题。这意味着有点含糊,但我提供了适当的详细程度。你不应该有代码才能给出一个好的答案。设计发生在你编码之前。 – programm3r

+0

我们(好吧,我)需要一个具体的例子来弄清楚你在问什么。只是给出一个解释的问题包括语言障碍和人与你不在同一波长,这两者都与[so]非常相关。 – Dukeling

回答

4
  • 当不能使用这些参数完全初始化类的对象时,使用构造函数参数。例如:如果您正在创建Employee类,并且您希望Employee的每个实例都必须有名称,那么您应该在构造函数中使用name作为参数。另一个例子是,你不能创建File类,而没有指定要打开的文件的名称。

  • 仅在方法上下文中相关的参数应作为方法参数传递。例如,可以在向类List添加新项目时使用。这可能会在内部更新对象的状态,但是这就是这个类的工作原理 - 它有内部数据结构来维护列表,方法是用来操纵这些状态的。

  • 有时底层框架可能希望您使用setter方法初始化状态。当使用像Hibernate这样的ORM或者在MVC框架(例如Spring MVC)中使用Web表单中的Model对象等POJO Bean时,通常会出现这种情况。在这些情况下,这些类通常代表Value Object,并且一般不会将构造函数中的参数作为框架使用默认无参数构造器实例化对象。可以使用构造函数或使用setter方法注入依赖项。在这种情况下,您应该针对强制性依赖关系使用构造器参数,并使用setter作为可选依赖项 - 尽管没有必要这样做。你可以把它当作指导。