В настоящее время я работаю над устаревшей системой, использующей реализацию Oracle ADF Faces JSF для уровня представления. Система полагается на механизм правил, который делает определенные элементы формы необходимыми, отключенными или даже выделенными в зависимости от взаимодействия пользователя с ними или введенных значений.
На данном этапе приложение «работает», вроде. Текущая реализация, обрабатывающая механизм правил и обновления интерфейса, не очень элегантна и состоит из большого набора операторов if, подобных:
if(screenObj instanceof CoreInputText) {
((CoreInputText) screenObj).setDisabled(true);
}
Чтобы усложнить микширование, у нас также есть свои собственные объекты, смешанные таким образом, что набор в целом не имеет общего предка, что исключает нашу возможность сделать что-то вроде:
((CommonAncestor) screenObj).setDisabled(true);
Вопрос в том, стоит ли переделывать эту часть кода, чтобы она была чище и понятнее. Поскольку большинство элементов экрана являются элементами ADF Faces, мы не можем / не можем изменить их происхождение, чтобы добавить дополнительные методы.
Цель изменения кода будет двоякой: очистить старый код и улучшить базу кода, чтобы добавление новых элементов или элементов управления не приводило к значительному изменению кода (особенно к операторам if, которые существуют в многочисленные места).
Так что, если мы пойдем вперед с этим изменением, что будет лучшим выбором для достижения того, что мы ищем? Разбить все элементы на подклассы (требуя нового класса каждый раз, когда мы используем другой ранее существующий элемент управления) или реализовать шаблон декоратора? Моя единственная проблема с декоратором заключается в том, что для каждого дополнительного элемента все равно потребуется изменение кода. Похоже, что обе опции уменьшают изменения кода, поскольку несколько методов, содержащих их, не требуют обновления блоков.
Любой вклад в методы для обработки таких ситуаций, кроме подклассов и декораторов, приветствуется!