我已經參與了一個Java項目,該項目從不同的支付代理獲取支付信息,處理它並存儲到我們的結算系統(數據庫)中。在這種情況下創建通用的DAO還是將它分離到較小的DAO會更好?
由於我們有不同的代理商,因此有不同的付款協議,因此我們有時會使用類似的付款方式,有時也會使用不同的付款方式。一些協議需要添加,檢查和刪除支付,一些需要檢查支付狀態並添加支付,另一些協議需要實現非常特定的協議方法。所以很難設計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() {...}
}
我在想,這是處理這種情況的最好方法嗎?另一種方法是創建特定的接口(我在SOLID中的原則),但由於不可能創建接口層次結構,所以會存在代碼重複性。沒有支持所有付款代理的基本方法。處理這種情況的最佳做法是什麼?
曾聽說過[_generic types_](https://docs.oracle.com/javase/tutorial/java/generics/types.html)?除此之外......基於意見! – Seelenvirtuose
@Seelenvirtuose它對此有何幫助? – GlaIZier
爲什麼不使用某種類型的定位器,基於帶有單個方法的接口,如'handlePayment',並且如果您有辦法在接收付款時找到解決方案,則可以使用基於代理的不同實現? – DamCx