有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在这种情况下,是创建通用DAO更好,还是将其与较小的DAO分离更好?

我参与了一个Java项目,该项目从不同的支付代理获取支付信息,对其进行处理并存储到我们的计费系统(数据库)

由于我们有不同的代理,因此有不同的支付协议,我们有时有相似的,有时有不同的支付方法。有些协议需要添加、检查和删除付款,有些协议需要检查付款状态和添加付款,还有一些协议需要实现非常特定的协议方法。因此,很难设计DAO接口的层次结构

最终,我们创建了一个通用DAO接口,它支持所有可能的支付方法,并为每个支付代理实现了该DAO接口。如果支付代理不支持特定的方法实现,则抛出UnsupportedOperationException()。例如:

    piblic interface Dao {
        void addPayment(Payment p);
        void removePayment(Payment p);
        ...
        String getVersion();
    }

    public PaymentAgentDao implements Dao {
        public void addPayment(Payment p) {...}
        public void removePayment(Payment p) {...}
        public String getVersion() {
            throw new UnsupportedOperationException();
        }
    }

    public AnotherAgentDao implements Dao {
        public void addPayment(Payment p) {...}
        public void removePayment(Payment p) {
            throw new UnsupportedOperationException();
        }
        public String getVersion() {...}
    }

我想知道这是处理这种情况的最好办法吗?另一种方法是创建特定的接口(我的原则是实数形式),但由于无法创建接口层次结构,因此会出现代码重复。没有支持所有支付代理的基本方法。处理这种情况的最佳做法是什么


共 (1) 个答案

  1. # 1 楼答案

    我认为你所拥有的是正确的,但它可以稍微改进

    • 我认为接口的更好名称是代理,甚至PaymentAgent,因为这是系统中对象的类型。我坚持认为所有这些都是单一类型的,但对象会和人一样不同——都是相似的,但做同样的事情会有点不同。所以,一个代理只是支付,另一个检查,第三个可以做黑魔法

    • 除了接口之外,我还创建了一个抽象类PaymentAgentAdapter,包含所有具体的方法,但什么也不做。这样,这些代理的所有具体对象只需要实现它们实际需要的方法。这有助于缩短代码

    • 我会考虑把不必要的操作抛诸脑后,这是一种不便,甚至是不正确的做法,因为它需要设法抓住客户方的代理人的所有方法。