2

Orderというエンティティと、アプリケーション層からの要求に基づいて注文状態やその他の情報を更新する集約ルートOrderManagerがあります(AppLayerはOrderManagerを呼び出し、Or​​derManagerはOrdersを含む内部状態を管理します)。

各注文には有効期限があるので、有効期限を処理するアクションをスケジュールしたいと思います。どこに置けばいいのかわからない。私は2つのアプローチを考えます:

  1. ドメインモデルでインターフェイスISchedulerを定義します。そのため、OrderManagerはこのインターフェースをタスクのスケジューリングに使用します。
  2. インターフェイスを定義するのではなく、アプリケーションレベルでの有効期限の処理をスケジュールします。これは、アプリ層がOrderManager.HandleExpirationなどのメソッドを呼び出すことを意味します

個人的には最初のアプローチが好きですが、誰か別のアイデアがあるかもしれません。

4

1 に答える 1

2

まず、OrderエンティティはOrder集計の集計ルートである必要があります。マネージャー クラスが不要になるように、状態変更動作をカプセル化する必要があります。その後、アプリケーション サービスはOrderエンティティに直接委任します。

注文の有効期限を処理する限り、いくつかのことを考慮する必要があります。これのいずれかが永続的である必要がありますか? つまり、データベースに保持され、アプリケーションにロードされず、有効期限を処理する必要がある注文はありますか? その場合は、アプリケーションの境界を超えるワークフローを実装する必要があります。これを行う 1 つの方法は、現時点で期限切れになる注文についてデータベースをポーリングするバックグラウンド サービスを継続的に実行することです。次に、注文の有効期限イベントを処理するハンドルにコマンドを送信します。このハンドラーはドメインに委任し、最終的にOrderのHandleExpirationメソッドに委任します。実在物。注文の有効期限は単なるイベントであり、他のドメイン イベントと同様に処理されます。バックグラウンド サービスは、このイベントを可能にするインフラストラクチャの一部にすぎません。これは、アプローチ#2に最も適しているようです。

于 2013-02-13T18:24:27.990 に答える