gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:51:17 29 4
gpt4 key购买 nike

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

由于我们有不同的代理,因此支付协议(protocol)也不同,因此我们有时有相似的支付方法,有时则有不同的支付方法。有些协议(protocol)需要添加、检查和删除付款,有些需要检查付款状态并添加付款,有些则需要实现非常具体的协议(protocol)方法。因此DAO接口(interface)的层次结构设计比较困难。

最终,我们创建了一个通用 DAO 接口(interface),支持所有可能的付款方法,并为每个付款代理提供了该 DAO 接口(interface)的一个实现。如果支付代理不支持特定方法实现,则会抛出 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() {...}
}

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

最佳答案

我认为你所得到的是正确的,但还可以稍微改进。

  • 我认为该接口(interface)更好的名称是 Agent 甚至 PaymentAgent,因为这是系统中对象的类型。我坚持认为所有这些都只有单一类型,但对象会像人一样不同 - 都相似,但做相同的事情有点不同。因此,一名代理人只需付款,另一名代理人检查某些内容,第三名代理人可以执行黑魔法......

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

  • 我认为抛出 UnsupportedOperationException 会带来不便甚至不正确,因为它需要在客户端 try catch 代理的所有方法。

关于java - 在这种情况下,是创建通用 DAO 还是将其与较小的 DAO 分开更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42388487/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com