我目前正在使用 Oracle 的 ADF Faces JSF 实现表示层的遗留系统。该系统依赖于规则引擎来根据用户与它们的交互或输入的值来使某些表单元素成为必需、禁用甚至突出显示。
在当前阶段,应用程序正在“工作”,有点。当前处理规则引擎和前端更新的实现不是很优雅,并且由大量的 if 语句组成,类似于:
if(screenObj instanceof CoreInputText) {
((CoreInputText) screenObj).setDisabled(true);
}
为了使混合更复杂,我们还混合了我们自己的对象,因此整个集合不共享一个共同的祖先,从而消除了我们执行以下操作的选项:
((CommonAncestor) screenObj).setDisabled(true);
问题是是否值得重新编写这部分代码以使其更清晰。由于大多数屏幕元素都是 ADF Faces 元素,我们不能/不允许更改它们的祖先以添加其他方法。
代码更改的目标有两个:清理旧代码并改进代码库,以便添加新元素或控件不会导致大的代码更改(特别是存在于许多地方的 if 语句) .
那么,如果我们继续进行这种改变,那将是实现我们正在寻找的更好的选择?子类化所有元素(每次我们使用另一个预先存在的控件时都需要一个新类)或实现装饰器模式?我对装饰器的唯一担心是它仍然需要为每个附加元素更改代码。这两个选项似乎都可以减少代码更改,因为包含这些 if 块的多个方法不需要更新。
除了子类化和装饰器之外,任何有关处理此类情况的方法的输入都是受欢迎的!