仕事をするのに長い時間がかかるかもしれないし、そうでないかもしれないバッチ操作を考えてみてください(データに依存します)。ユーザーは、ジョブの進行状況を追跡するためのオプションのリスナーを登録できます。
注:リスナーの登録は完全にオプションであり、ユーザーはリスナーを登録せずにジョブを呼び出したい場合があります。
Q:次のソリューションのどれがあなたの好みですか、そしてその理由は何ですか?
編集:ここでの懸念は、パフォーマンスとクリーンなコードです。null参照のチェック(ソリューション1)は、2番目のソリューションに比べて高速であると言う人もいます。しかし、2番目の解決策はよりクリーンで理解しやすいものです。ご意見をお聞かせください。
いいえ1:nullリスナーを許可し、リスナーがnullでないかどうかを常に確認してから、呼び出します。
doMyBatchJob() {
if (listener != null) {
listenr.progressStarted(params);
}
while (x) {
if (listener != null) {
listener.progressUpdated(current, expected)
}
}
if (listener != null) {
listenr.progressFinished(params);
}
}
いいえ2:ダミーリスナーを実装し、ユーザーが自分のリスナーを渡さなかった場合はそれを登録します。nullオブジェクトをチェックせずにリスナーを呼び出すことができるようにします。
DummyListener {
public void progressStarted(params) { //DO NOTHING }
public void progressUpdated(current, expected) { //DO NOTHING }
public void progressFinished(params) { //DO NOTHING }
}
doMyBatchJob() {
listener.progressStarted(params);
while (x) {
//Do a single unit of the batch operation
// ... code omitted here
listener.progressUpdated(current, expected)
}
listener.progressFinished(params)
}