我目前正在使用Oracle的ADF Faces JSF實現用於表示層的遺留系統。系統依賴於規則引擎,根據用戶與它們的交互或輸入的值,使某些表單元素成爲必需,禁用甚至突出顯示。添加功能:子類與修飾器
在目前的階段,應用程序是「工作」的,有點。當前實現處理規則引擎和前端的更新是不是很優雅,有一個寬敞的集合,如果類似的語句:
if(screenObj instanceof CoreInputText) {
((CoreInputText) screenObj).setDisabled(true);
}
進來,我們也有這樣的混合我們自己的對象複雜化一體設置不共享一個共同的祖先,從而消除我們做這樣的選擇:
((CommonAncestor) screenObj).setDisabled(true);
的問題是,它是否會成爲值得返工代碼的這一部分更清潔,更清晰。由於大多數屏幕元素都是ADF Faces元素,因此我們不能/允許更改其祖先以添加其他方法。
代碼更改的目標有兩個方面:清理較舊的代碼並改進代碼庫,以便添加新的元素或控件不會導致較大的代碼更改(特別針對if語句存在在許多地方)。
所以,如果我們繼續這種改變,這將是實現我們要找的更好的選擇?爲所有元素創建子類(每次我們使用另一個預先存在的控件時都需要一個新類)或實現裝飾器模式?我唯一關心的是裝飾器,它仍然需要爲每個附加元素進行代碼更改。這兩個選項似乎都會減少代碼更改,因爲包含這些if塊的多個方法不需要更新。
歡迎任何關於處理子類和裝飾器以外的情況的輸入!
對不起,我應該提到這一點。不,他們沒有一個共同的方法。我也希望爲這兩種方法增加新的方法;像突出(布爾),這將只是設置一些屬性。 – doomspork 2009-08-26 02:42:33