Я знаю, что вопрос - это больше вопрос, который нужно обсудить, чем ответ, но я не смог перефразировать вопрос, чтобы сделать его более конкретным.
В настоящее время я занимаюсь разработкой страниц на основе JSF 1.2, и я думал о том, как эффективно повторно использовать части страниц. Мне пришла в голову следующая идея (пример сценария):
Страница 1 состоит из трех частей, то же самое относится и к странице 2.
Я извлек три части в отдельных файлах, и я включаю их на страницах 1 и 2 (используя <ui:include />
).
Таким образом, страница 1 включает в себя части 1, 2 и 3, а страница 2 - части 1, 2 и 3 (они идентичны).
В этот момент я думал о том, как повторно использовать поддерживающие бобы, и мне пришла в голову следующая идея:
Каждая страница имеет свой собственный компонент поддержки, назовем его «компонент 1» (для страницы 1) и компонент 2 (для страницы 2).
Я определяю интерфейс для каждой части. Таким образом, у меня есть один интерфейс (называемый интерфейс 1) для части 1, второй интерфейс (называемый интерфейс 2) для части 2 и так далее. Эти интерфейсы определяют все методы, необходимые для его части. F.ex. если часть 1 требует атрибута «test» (a String
) на сайте JSF (<h:outputText value="#{bean.test}" />
), интерфейс 1 определяет метод с именем public String getTest();
.
Итак, моя основная идея заключается в том, что если страница 1 включает в себя часть 1, ее компонент поддержки (компонент 1) должен реализовывать интерфейс 1.
В моем сценарии базовый компонент страницы 1 будет реализовывать интерфейс 1, 2 и 3. Страница 2 также будет реализовывать интерфейс 1, 2 и 3.
Таким образом, до этого момента код в компоненте поддержки остается избыточным, чего я хочу избежать.
Чтобы решить эту проблему, я создаю абстрактные реализации для интерфейса 1, 2 и 3, которые называются абстрактной частью 1 и т. Д.
Эти абстрактные классы будут расширены компонентами 1 и 2. Компоненты 1 и 2 будут переопределять только те методы, которые отличаются от абстрактной реализации (например, методы, отвечающие за загрузку данных - в приведенном выше примере public String getTest();
может переопределить, чтобы предоставить разные данные для страницы 1 и страницы 2).
Так что мое окончательное решение - тихий комплекс. Теперь мой «вопрос»: это хороший способ повторно использовать бобы? Есть ли у кого-нибудь лучшие решения?
С уважением
stupidSheep