【发布时间】:2011-01-13 10:33:19
【问题描述】:
在我的应用程序中,我正在执行一个在执行结束时可能处于三种不同状态的事务:
- 成功
- 失败
- 待处理
根据状态,应用程序客户端将希望执行不同的操作。在成功的情况下,他们会想要检索交易结果(一个Widget)。在失败的情况下,他们将希望收到错误原因。在事务未决的情况下,他们将希望安排时间重试。目前我使用以下方法返回一个对象:
public interface Result() {
State getState();
Widget getWidget(); // Success
Reason getFailureReason(); // Failure
Callable<Result> getTask(); // Pending
}
这个想法是客户端检查结果对象的状态,并根据它的值调用适当的方法,例如
if (result.getState() == State.PENDING) {
result.getTask();
}
我在想最好使用回调代替,例如
public interface TransactionCallback() {
void onFailure(Reason reason);
void onSuccess(Widget widget);
Delay onPending(Delay previous);
}
其中Delay 是代表TimeUnit 和句点的类,允许应用程序重新安排事务执行。另一种选择是抛出一个包含失败原因的异常(因为它应该只在异常情况下失败),并保留onSuccess 和onPending 方法。
所以我对 SO 的问题是:对于这个特定问题,使用回调是一种合适的模式吗,或者任何人都可以提出更合适的建议吗?
【问题讨论】:
标签: java callback design-patterns listener