Java - как расширить приложение, которое нарушает принцип открытого-закрытого - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь расширить функциональность веб-приложения, написанного на Jelly & Java.

Сценарий: в приложении по умолчанию есть 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>

Как видите, сами метки и значения жестко закодированы.

В классе Java каждая метка имеет свою собственную назначенную переменную:

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;
    }

Имейте в виду, что значения сохраняются путем отражения (поле label1 из index.jelly сопоставляется с установщиком данных в файле .java).

Предположим, я хочу добавить неопределенное количество меток, как я могу их сохранить, поскольку я не могу создать сеттер для каждой из них, поскольку я не буду знать, сколько у меня есть?

1 Ответ

0 голосов
/ 30 августа 2018

неизменный объект с состоянием и поведением:

   class Label {

        private final Integer label;

        Label(Integer label) {
            this.label = label;
        }

        public Label differentLabel(Integer label){
            return new Label(label);
        }
    }

Затем вы можете создать несколько меток

...