【发布时间】:2015-02-08 16:59:35
【问题描述】:
这更像是一个设计问题。所以首先,我有一个枚举:
enum WageType {
MONTHLY {
public int getWageRatePerUnit() {
return 60000;
}
public boolean isPaymentTime(DateTime date) {
return date.getDayOfMonth() == 29;
}
},
DAILY {
public int getWageRatePerUnit() {
return 2500;
}
public boolean isPaymentTime(DateTime date) {
return date.getHourOfDay() == 20;
}
};
public abstract int getWageRatePerUnit();
public abstract boolean isPaymentTime(DateTime date);
}
现在我有 2 个抽象方法,以及枚举常量中的相应实现。实际场景中包含某种冗长的业务逻辑,我最终得到了 3 或 4 个这样的方法。
但我有一种感觉,我搞砸了我的枚举。这是否被认为是糟糕的设计实践,将特定于不同枚举类型的业务逻辑放在常量特定的方法中?如果我宁愿实现一个接口,并在那里定义方法,然后让所有枚举常量实现它们,那会有什么不同呢?当然,在那之后我将不得不在任何地方使用接口引用,但我必须看看它是否适用于休眠映射。目前,我使用@Enumerated(EnumType.String) 将枚举常量存储为实体的一部分。所以,我希望另一种方法不会对这部分产生太大影响,即最终行为应该保持不变。
顺便说一句,我认为不需要接口,因为我不会拥有一组具有类似行为的单独枚举常量。其他选项可能是某种实用程序类,以处理这些枚举常量。只需将方法传递给它正在处理的枚举类型。
你说什么?我应该遵循哪种方法?如果您能想到,我愿意接受任何其他更好的选择?
【问题讨论】:
-
你为什么用“休眠”标记这个问题?您是否需要将枚举存储为字符串或表列中的序数值? hibernate和枚举有什么关系?你想在枚举中注入一些 bean 吗?
-
@Magnamag 好吧,我必须将枚举常量作为我的实体的一部分存储在 db 中。目前我正在通过
@Enumerated(EnumType.String)进行操作。因此,如果采用更好的方法,我希望我不必在该部分进行更改(如果需要的话,也不需要太多)。
标签: java spring hibernate design-patterns enums