Мой заголовок немного смелый, вот проблема, о которой я говорю.
Скажем, у меня есть:
class Bill
{
public String legislationID;
public BillStatus currentStatus;
}
//and
class BillStatus
{
public String description;
}
Если сохранится, BillStatus соответствует таблице с одной строкой на каждое возможное состояние законодательного акта.(например, «На этаже дома», «На этаже сената» и т. д.).
Проблема, с которой я всегда сталкиваюсь, такова:
Как только поведение начинает меняться в зависимости от того, какой экземплярBillStatus привязан к Биллу, все это трудно представить.Я вижу два варианта:
1) Много переключателей в Bill, которые разветвляют поведение в зависимости от текущего BillStatus 2) методы в состоянии счета, которые принимают Bill в качестве параметра и имеют переключатели, которые выполняют различную логику в зависимости от идентичностипример.(таким образом, имитируя классы, реализующие общий интерфейс)
Оба эти метода кажутся небрежными.Я хотел бы иметь возможность сделать следующее:
class abstract BillStatus
{
public abstract String getDescription();
public abstract void callForVote(Bill bill);
}
Тогда:
@SpecialEntityTag(whenRowValue="HOUSEFLOOR")
class BillStatusHouseFloor extends BillStatus
{
/* special overrides for some methods */
}
class BillStatusGeneric extends BillStatus
{
/* standard implementation of BillStatus */
}
Это должно быть распространенной проблемой.Я думаю об этом неправильно?По сути, цель состоит в том, чтобы инкапсулировать поведение, которое изменяется с определенным значением непримитивного дочернего свойства.