3

From a design perspective, when is it better to remove method arguments and, instead, use constructor arguments where the methods can use class variables that have been initialized to the constructor arguments?

4

1 回答 1

5
  • 在没有这些参数的情况下无法将类的对象视为完全初始化时,请使用构造函数参数。例如:如果您正在创建 Employee 类,并且您希望 Employee 的每个实例都必须有名称,那么您应该在构造函数中使用名称作为参数。File另一个例子,如果不指定要打开的文件的名称,就无法创建类。

  • 仅在方法上下文中相关的参数应作为方法参数传递。例如,可以是当您向List课程添加新项目时。这可能会在内部更新对象的状态,但这就是此类的工作方式——它具有内部数据结构来维护列表,并且方法旨在操纵这些状态。

  • 有时底层框架可能希望您使用 setter 方法初始化状态。这通常是在使用像 Hibernate 这样的 ORM 或在 MVC 框架(例如 Spring MVC)中使用 Web 表单中的模型对象等 POJO Bean 时出现的情况。在这些情况下,这些类通常表示值对象,并且一般做法是不在构造函数中传递参数,因为框架使用默认的无参数构造函数实例化对象

  • 在使用依赖注入框架时,您会发现可以使用构造函数或使用 setter 方法注入依赖项。在这种情况下,您应该将 Constructor 参数用于强制依赖项,并将 setter 用于可选依赖项 - 尽管没有必要这样做。您可以将其视为指南。

于 2013-07-28T14:35:51.173 回答