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 楼答案
我认为你所拥有的是正确的,但它可以稍微改进
我认为接口的更好名称是代理,甚至PaymentAgent,因为这是系统中对象的类型。我坚持认为所有这些都是单一类型的,但对象会和人一样不同——都是相似的,但做同样的事情会有点不同。所以,一个代理只是支付,另一个检查,第三个可以做黑魔法
除了接口之外,我还创建了一个抽象类PaymentAgentAdapter,包含所有具体的方法,但什么也不做。这样,这些代理的所有具体对象只需要实现它们实际需要的方法。这有助于缩短代码