2

「startTime」値オブジェクトを持つ集約ルートがあります。さまざまな時点で、AR がさまざまな動作 (AR の内部と外部の両方) を強制するために "開始" したかどうかを判断する必要があります。また、パフォーマンス上の理由から、ストレージ層で集約ルートを「開始」状態でフィルタリングできるようにする必要もあります。

これを DDD に適した方法で実装する方法がわかりません。状態の変更を外部ソース (スケジュールされたイベント ハンドラー) に公開し、状態を明示的に定義することを検討しました。

public class AggregateRoot {
    private Time startTime;
    private boolean started;
    ...
    public void start() {
        started = true;
    }
    public boolean isStarted() {
        return started;
    }
}

これには、ストレージ レイヤーでのクエリが簡単であるという利点がありますが、startTime 値オブジェクトが冗長になり、AR が定義された startTime で状態を切り替えることを強制するものがドメイン内にないため、奇妙に思えます。

また、「now」と「startTime」の比較に基づいて状態を暗黙的に定義することも検討しました (AR の構築時または getter のいずれかで、例は getter にあります)。これは、AR が自身の状態などを完全に制御できることを意味しますが、このロジックを複製せずに状態によってストレージ レイヤーでクエリをフィルター処理できないことを意味します (保守性に問題があります)。

public class AggregateRoot {
    private Time startTime;
    ...
    public boolean isStarted() {
        return now().isAfter(startTime);
    }
}

時限ベースの状態変化を処理するための既存のパターンはありますか? これにアプローチするより良い方法はありますか?

4

1 に答える 1