サーバーでWebアプリを実行していますが、これによりバランスが更新されます。残高が更新されたら、残高が5000を下回っているかどうかを確認する必要があります。残高が5000を下回った場合は、メールアラートを送信する必要があります。ここで注意すべき点は、アラートを1日に1回だけ送信する必要があることです。残高が5000を下回るたびにアラートを送信し続けるべきではありません。メールの送信にはシングルトンパターンを使用する必要があると思いますが、そうではありません。これを使用する方法を確認してください。バランスを見たときのプログラム5000を下回ると、電子メールアラートを送信する関数を持つシングルトンクラスを呼び出す必要がありますが、残高が減少したときにプログラムがこの関数を再度呼び出さないようにするにはどうすればよいですか?誰かがこれについて私を導くことができますか?
5 に答える
シングルトン パターン は、クラスのインスタンス化を 1 つのオブジェクトに制限する設計パターンです。これは、システム全体でアクションを調整するために 1 つのオブジェクトだけが必要な場合に役立ちます。
しかし、あなたの要件については、それが役立つかどうかわかりません。おそらく、いくつかのフラグの概念を使用できます。そして、フラグは毎日クリアする必要があります。
Singleton is a design pattern that makes sure only one instance of an object is created.
Doesn't sound like it has anything to do with what you need, you could add a flag in your DB like alert_sent=true/false
and update it accordingly.
ここでは、「特別な」設計パターンは必要ありません。たとえば、次のように、最後の電子メール通知が送信された日付を保存できます。
Date lastEmail = ... // last email date
そして、条件を確認してメールを送信しようとすると:
If( ... ) // lastEmail is before current day
{ //send emal and update lastEmail }
考えなければならないことが 2 つあります。
- メール送信サービス。
それを実装するいくつかの方法。はい、それはSingletonである可能性がありますが、プレーンな Java サービスである可能性もあります。Springを使用する場合、非常にシンプルで便利な定義済みの実装があります。ここに例があります。
- チェック残高ロジック。
本当に必要なものによって異なります。残高の更新をすべて確認する必要があるが、アラートを 1 日に 1 回しか送信しない場合は、次のようになります。
private Date lastAlertDate;
private static final BALANCE_LIMIT = 5000;
private void handleBalanceUpdated(long balance) {
if (balance < 5000) {
log.info("Balance has gone below {}", BALANCE_LIMIT);
int daysDifference = getDifferenceInDays(lastAlertDate, new Date());
if (daysDifference >= 1) {
log.info("Last alert was {} days ago, going to send email alert", daysDifference);
alertService.sendSimpleAlert("Balance has gone below " + BALANCE_LIMIT + "!");
lastAlertDate = new Date();
}
}
}