使用枚举或反射的恒定特定方法 ?需要基于字符串调用方法



我有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()

相关内容

  • 没有找到相关文章

最新更新