現在、プレゼンテーション層にOracleのADF Faces JSF実装を使用しているレガシーシステムで作業しています。システムは、ルールエンジンを使用して、ユーザーとのやりとりや入力された値に応じて、必要なフォーム要素、必要不可欠な要素、または強調表示さえするようにします。機能を追加する:サブクラスとデコレータ
現在のところ、アプリケーションは「作業中」です。ルールエンジンとフロントエンドの更新を扱う現在の実装では、非常にエレガントではありませんし、次のようなif文の大規模なセットで構成されています
if(screenObj instanceof CoreInputText) {
((CoreInputText) screenObj).setDisabled(true);
}
は、我々はまた、その中で混合し、私たち自身のオブジェクトを持ってミックスを複雑にするには全体として設定するような何かをやって私たちの選択肢を排除するため、共通の祖先を共有しない:
((CommonAncestor) screenObj).setDisabled(true);
問題は、それがクリーンでより明確にするために、コードのこの部分を作り直し価値があるだろうかどうかではありません。画面要素の大部分はADF Faces要素なので、追加のメソッドを追加するために祖先を変更することはできません。
コード変更の目標は、古いコードをクリーンアップし、新しい要素やコントロールを追加しても大きなコード変更(特に存在するifステートメント数多くの場所で)。
私たちが探しているものを達成するためのよりよい選択であるこの変更を進めたら、すべての要素をサブクラス化する(既存の別のコントロールを利用するたびに新しいクラスが必要)か、デコレータパターンを実装するか?デコレータの私の唯一の懸念は、各追加要素に対してコード変更が必要であることです。両方のオプションは、これらのifブロックを含む複数のメソッドが更新する必要がないため、コードの変更を減らすように見えます。
サブクラス化やデコレータ以外のこのような状況を処理するメソッドの入力はすべて歓迎です!
申し訳ありませんが、私はそれを言及すべきでした。いいえ、彼らは共通の方法を持っていません。私は両方に新しいメソッドを追加したいと考えていました。 highlight(boolean)のようなもので、いくつかのプロパティを設定するだけです。 – doomspork