java - 如何扩展违反开闭原则的应用
java - how to extend app that violates open-closed principle
我正在尝试扩展用 Jelly & Java 编写的 Web 应用程序的功能。
场景:应用程序有 2 个默认的硬编码标签:label1 & label2
在 index.jelly 下我们有
<f:entry title="${%Label1}"
field="label1">
<f:textbox name="label1"
value="${it.label1}"
default=""/>
</f:entry>
<f:entry title="${%label2}"
field="label2">
<f:textbox name="label2"
value="${it.label2}"
default=""/>
</f:entry>
如您所见,标签本身和值是硬编码的。
在Javaclass中,每个标签都有自己的赋值变量:
private Integer label1;
private Integer label2;
public Integer getlabel1() {
return label1;
}
@DataBoundSetter
public void setlabel1(Integer label1) {
this.label1= label1;
}
public Integer getlabel2() {
return label2;
}
@DataBoundSetter
public void setlabel2(Integer label2) {
this.label2= label2;
}
请记住,这些值是通过反射保留的(来自 index.jelly 的 label1 字段与 .java 文件中的数据绑定 setter 匹配)。
假设我想添加无限数量的标签,我无法为每个标签创建一个 setter,因为我不知道我有多少标签,我该如何保留它们?
具有状态和行为的不可变对象:
class Label {
private final Integer label;
Label(Integer label) {
this.label = label;
}
public Label differentLabel(Integer label){
return new Label(label);
}
}
然后你可以创建多个标签
我正在尝试扩展用 Jelly & Java 编写的 Web 应用程序的功能。
场景:应用程序有 2 个默认的硬编码标签:label1 & label2
在 index.jelly 下我们有
<f:entry title="${%Label1}"
field="label1">
<f:textbox name="label1"
value="${it.label1}"
default=""/>
</f:entry>
<f:entry title="${%label2}"
field="label2">
<f:textbox name="label2"
value="${it.label2}"
default=""/>
</f:entry>
如您所见,标签本身和值是硬编码的。
在Javaclass中,每个标签都有自己的赋值变量:
private Integer label1;
private Integer label2;
public Integer getlabel1() {
return label1;
}
@DataBoundSetter
public void setlabel1(Integer label1) {
this.label1= label1;
}
public Integer getlabel2() {
return label2;
}
@DataBoundSetter
public void setlabel2(Integer label2) {
this.label2= label2;
}
请记住,这些值是通过反射保留的(来自 index.jelly 的 label1 字段与 .java 文件中的数据绑定 setter 匹配)。
假设我想添加无限数量的标签,我无法为每个标签创建一个 setter,因为我不知道我有多少标签,我该如何保留它们?
具有状态和行为的不可变对象:
class Label {
private final Integer label;
Label(Integer label) {
this.label = label;
}
public Label differentLabel(Integer label){
return new Label(label);
}
}
然后你可以创建多个标签