我有DTO(数据传输对象(发送到DAO(数据访问对象(。
DTO 有一个标识符字符串。
基于这个字符串(或者更确切地说是 DTO(,我想在 DAO 中调用特定的方法。
这些方法进行数据库调用。
我找到了两个选项来执行此操作:1. 使用枚举实现常量特定方法2. 基于反射调用方法(在这种情况下,DTO 将携带需要调用的方法的名称。
我想知道哪个是更好的选择。还有其他选择吗?是否可以在枚举中进行数据库调用。
使用的编程语言是Java。
我不会将数据库调用放在您的枚举中。 相反,在您的 DAO 上提供一个接受 DTO 的方法,然后让该方法根据 DTO 上的字符串调用 DAO 中的其他方法。 您可以在枚举上使用 switch 语句,并使其非常有效。 (或者,将此实现放在单独的"适配器"类中,因为可以说此代码也不属于 DAO。
我也会避免反思,主要是由于额外的复杂性 - 包括调试和故障排除,以及潜在的安全问题。 (如果 String 包含您不想调用的方法名称怎么办?
您可以创建一个映射,将字符串映射到方法调用:
class YourDAO {
private interface Action {
public void perform();
}
private Map<String, Action> actions;
public YourDAO() {
actions.add("String1", new Action() {
public void perform() {
daoMethod1();
}
}
actions.add("String2", new Action() {
public void perform() {
daoMethod2();
}
}
}
public void daoMethod1() {
...
}
public void daoMethod2() {
...
}
public void doSomethingWithDTO(YourDTO dto) {
actions.get(dto.getIdentifier()).perform();
}
}
您甚至可以调整此想法以对不同的 DTO 类型执行特定操作,如果您将映射的密钥类型更改为Class<?>
,而不是dto.getIdentifier()
使用 dto.getClass()
。