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?
问问题
133 次
1 回答
5
在没有这些参数的情况下无法将类的对象视为完全初始化时,请使用构造函数参数。例如:如果您正在创建 Employee 类,并且您希望 Employee 的每个实例都必须有名称,那么您应该在构造函数中使用名称作为参数。
File
另一个例子,如果不指定要打开的文件的名称,就无法创建类。仅在方法上下文中相关的参数应作为方法参数传递。例如,可以是当您向
List
课程添加新项目时。这可能会在内部更新对象的状态,但这就是此类的工作方式——它具有内部数据结构来维护列表,并且方法旨在操纵这些状态。有时底层框架可能希望您使用 setter 方法初始化状态。这通常是在使用像 Hibernate 这样的 ORM 或在 MVC 框架(例如 Spring MVC)中使用 Web 表单中的模型对象等 POJO Bean 时出现的情况。在这些情况下,这些类通常表示值对象,并且一般做法是不在构造函数中传递参数,因为框架使用默认的无参数构造函数实例化对象
在使用依赖注入框架时,您会发现可以使用构造函数或使用 setter 方法注入依赖项。在这种情况下,您应该将 Constructor 参数用于强制依赖项,并将 setter 用于可选依赖项 - 尽管没有必要这样做。您可以将其视为指南。
于 2013-07-28T14:35:51.173 回答