【发布时间】:2013-05-28 06:52:56
【问题描述】:
我有一个在表格布局中创建行的类。行的创建取决于数据和元数据。由于元数据对于每一行都是相同的,例如显示/隐藏可见性属性等,所以我将元数据属性创建为静态并使用 initWidget 的 RowWidget 初始化一次。
举例:
class RowWidget extends FlexTable{
public static void initWidget(Form form,
HashMap<Long, ContractorPermissionEnum> formModePermissionMap,
GridMode gridMode,
boolean isApplied,
boolean isChildExist,
boolean isChildAttachment)
{
// ...
}
}
然后我为每个记录数据调用下面的构造函数。
public RowWidget(DataRawType dataRawType, Data data, Data parentData) {
// ...
}
我认为这不是正确的方法。因为当任何人看到这个类然后理解它会创建一行时,作为模式。我最初不想打电话给initWidget。我想在构造函数中传递每个必需的参数,就像
public RowWidget(DataRawType dataRawType,
Data data,
Data parentData,
Form form,
HashMap<Long, ContractorPermissionEnum> formModePermissionMap,
GridMode gridMode,
boolean isApplied,
boolean isChildExist,
boolean isChildAttachment) {
// ...
}
但是由于这个原因,构造函数没有参数。而且我认为在构造函数中有 5+ 参数也是不好的模式。
有人推荐我吗:
- 如何构造具有相同属性的类 实例?
注意:我知道这只能通过静态实现,但不想使用静态。
- 什么是构建类的最佳方法,有一些默认修复 所有实例的属性?
注意:我不想创建另一个类来实现它。或任何 getter/setter 方法。
提前致谢。
【问题讨论】:
-
如果您将布尔参数转换为
Map或Set,就像您对表单权限所做的那样,您可以稍微减少参数列表的长度 -
是的,我可以。让我们任何人都不要有另一种方法。我会去的。
-
好吧,如果你真的不想要任何新类,想要摆脱静态和长参数列表,这个 DIRTY 建议怎么样:使用
Map<String, Object>要保存您的参数,请填写一次并将该映射传递给RowWidget构造函数,然后在构造时获取+转换它们以供使用。这比拥有长参数列表更糟糕,因为最后一个参数列表更明确地说明了类需要哪些参数并且更具可读性/可维护性。您还应该重新考虑您的设计。是什么阻碍了您引入新课程? -
@A4L 呵呵,这正是我在阅读 no-new-class-note 时的第一个想法,但我不敢提出建议;)
-
@MarcoForberg 哈哈...这就是为什么它只作为评论出现;-)
标签: java design-patterns