基幹業務アプリケーションのメール モジュールを構築しています。何らかの入力に応答してメールを送信する場合、ユーザーが異なるアイテムを含む複数の連続したメールを受信するのではなく、すべてのアイテムが含まれる 1 つのメールのみを受信するように、メールをグループ化する必要があります。また、メールは、メール通知を作成した入力のタイプに応じて、特定のタイプでグループ化する必要があります。入力のリストがあり、それぞれに特定のグループ化タイプがあります。たとえば、次のようになります。
階層:従業員にはプロセスがあり、リクエストにはアクティビティがあります
アクティビティ 1: 従業員による(したがって、受信者は、このアクティビティ タイプの所有するプロセスのすべての通知を 1 つのメールで受け取ります)
アクティビティ 2: プロセスごと(受信者は、このプロセスおよびこのアクティビティ タイプのすべての要求のすべての通知のグループを取得します)
アクティビティ 3: リクエスト別 (このリクエストのアクティビティはグループ化されます)
アクティビティ 4: アクティビティ別 (各アクティビティは別のメールで送信されます)
このグループ分けは常に変化します。
メールが同時に生成されてグループ化されるようにするには、入力を一度に行う必要があると考えるかもしれません。 そうしないと、システムは他の入力をいつ待機し、いつ別のメールを送信するかをどのように知るのでしょうか?.答えは両方なので、私がやっているのはタイマーを設定して、メール サービスが 5 分ごとに実行されるようにすることです。一部の即時メールは数分遅れる可能性がありますが、それは手頃な価格のトレードオフです。
そこで、この責任の連鎖デザイン パターンを使用することにしました。構造は次のとおりです。
したがって、各タイプがどうあるべきかを定義する2 つのインターフェイスIGroupingTypeCalculateGrouping()
があり、2 つのメソッドがあります: : これがアクティビティのグループ化であるかどうかを決定します。GroupEmailsToSend()
: これがグループ化の場合、メール リストを取得します。
インターフェイスIGroupingHandlerは、各グループ化タイプを呼び出すサービス クラスです。IGroupingTypeGetGroupingResult()
の具体的な実装で2 つのメソッドを呼び出すだけで、最初に正しいグループ化を取得し、それが見つかったときに を呼び出します。このインターフェイスは、グループ化ごとにチェーン内の次のノードも登録します。CalculateGrouping()
GroupEmailsToSend()
グループ化 Enum は、グループ化計算の結果を返すためだけのものです。
そして、EndOfChainSendingGroupingクラスもあります。グループ化が見つからない場合に備えて、すぐにメールを送信します。
基本的に、この構造についてアドバイスが必要です。私はこのパターンに慣れていないので、落とし穴はありますか? 私が改善できることはありますか?またはこれを達成するためのより良い方法はありますか?
前もって感謝します..