私が構築しているアプリケーションでは、特定の操作を実行する集約のグループを選択する必要がある多くのシナリオがあります。例えば、私はReminder
集団の束が期限切れ方針を満たしていれば(それが1つしかない)、期限切れとしてマークしなければならないかもしれません。不変量についてはリポジトリを信頼すべきでしょうか?
私はReminderExpirationPolicy
ドメインサービスを持っており、リマインダを配信する前に常に適用されます。それはSqlReminderRepository.findRemindersToExpire
メソッド内でもReminder.expire
集計のメソッド内のSQL述語として存在するよう
reminderRepository.findRemindersToExpire().forEach(function (reminder) {
reminder.expire(clockService.currentDateTime());
});
有効期限ポリシーが現在重複している:このポリシーは、のようなものはありません。
質問への答えは強く(そこには間違いなく長所と短所すべきである - そしておそらく広く採用されている練習)opiniatedすることができるが、私は単にReminder.expire
方法のみReminderExpirationPolicy
プロセスの一部として呼び出されますことを信頼すべきですリポジトリの実装が正しいリマインダーセットを返すことを信頼するか、またはReminder
集合体内の不変量を保護する必要がありますか?
注:単一のトランザクションで複数の集約を変更することは最適ではなく、スケーラビリティを妨げることになりますが、私の場合は最も実用的な解決策です。
リマインダーは通常の有効期限まで手動で有効期限切れにできませんか?私は通常、時間を意味する不変量には注意が必要です。なぜなら、それは扱うのが最も難しい制約です。 – guillaume31
@ guillaume31いいえ、手動で期限切れにすることはできませんが、有効期限と呼ばれることはありませんが、送信を防ぐ他の手段があります。リマインダーが有効なルールは非常に厳しいため、有効期限は自動化されます。これらは税申告通知であり、財政期末(FPE)前および後に通知が送信されます。 FPEが終了している場合、 'before'リマインダーを送信することは意味がありません。 – plalx
通常、期限切れは、長時間のリマインダの送信を妨げるシステムの問題があった場合、またはあまりに長い間訂正されなかった場合にのみ発生します。 – plalx