説明のために、次のような古典的な階層があるとします。
abstract class Vehicle {
private int cost;
// imagine the usual getters and setters here
}
class Car extends Vehicle {
private String make, model, year;
// getters and setters
}
class Plane extends Vehicle {
private int yearIntroduced;
// getter and setter
}
ここで、バッキングBeanにVehicleインスタンスのリストがあるとしますbb.vehicles
。統一編集をサポートするにはどうすればよいですか?この種のコードを回避する方法がわかりません。
<ui:repeat value="#{bb.vehicles}" var="vehicle">
<!-- this is where the trouble begins -->
<app:editCar car="#{vehicle}" rendered="#{test vehicle to see if it is a car}"/>
<app:editPlane plane="#{vehicle}" rendered="#{test vehicle to see if it is a plane}"/>
</ui:repeat>
これは、適切なOO設計に対する侮辱のように思われます。これは、車両自体が、それを調べて自分自身を決定するビューではなく、何らかの形で正しいビューの選択に参加する必要があることを示しているようです。このパターンは、クラスまたはそのサブクラスのインスタンスである必要があるオブジェクトに半異種のコレクションまたはプロパティがあるコードの多くの場所で見られます。また、何ができるかを公開する特別なエディターが必要です。サブクラスが異なります。匂いのようですが、もっと良い方法があるかどうか聞いてみようと思いました。