Java 类,表示行为需要按行变化的表

Java 类,表示行为需要按行变化的表,java,design-patterns,orm,oop,Java,Design Patterns,Orm,Oop,我的标题有点夸张,这就是我要说的问题 假设我有: class Bill { public String legislationID; public BillStatus currentStatus; } //and class BillStatus { public String description; } 持久化后,BillStatus对应于一个表,该表在一项立法的每个可能状态中都有一行。(例如“在众议院”、“在参议院”等) 我经常遇到的问题是: class abs

我的标题有点夸张,这就是我要说的问题

假设我有:

class Bill
{
   public String legislationID;
   public BillStatus currentStatus;
}

//and

class BillStatus
{
   public String description; 
}
持久化后,BillStatus对应于一个表,该表在一项立法的每个可能状态中都有一行。(例如“在众议院”、“在参议院”等)

我经常遇到的问题是:

class abstract BillStatus
{
    public abstract String getDescription();
    public abstract void callForVote(Bill bill);
}
一旦行为开始根据BillStatus的哪个实例附加到Bill而变化,整个事情就变得很难表示。我看到两种选择:

1) Bill中的许多交换机根据当前BillStatus执行分支行为 2) 方法,该方法接受bill作为参数,并具有根据实例标识执行不同逻辑的开关。(类似于实现公共接口的类)

这两种方法似乎都很草率。我希望能够做到的是:

class abstract BillStatus
{
    public abstract String getDescription();
    public abstract void callForVote(Bill bill);
}
然后:


这一定是一个常见的问题。我是不是想错了?基本上,我们的目标是封装随非原始子属性的特定值而变化的行为。

是什么阻止您使用您的设计

Hibernate(通常称为JPA)能够处理继承,您可以将整个继承层次结构存储在一个表中,并使用一个鉴别器列告诉特定行使用哪个子类


有关详细信息,请参阅。

另一个不太有效的解决方案:每个特定州的账单子类可能都存在。这在我的例子中不起作用,因为至少有3个类似于状态的属性会影响Bill的行为。这似乎意味着我需要bill的[count of property 1]*[count of property 2]*[count of property 3]子类。我可能应该推迟深夜的节目。谢谢