2

航空予約アプリケーションで CQRS を使用しています。ユースケースの 1 つは、顧客がチケットをキャンセルするのを支援することです。しかし、実際のキャンセルの前に、顧客は違約金を知りたがっています。

ペナルティは、航空規則に基づいて計算されます。私たちのプロバイダーの中には、Web サービスを公開することでペナルティを計算できるものもあれば、そうでないものもあります。(代わりに、アルゴリズムを説明する論文を公開しています)。だから私はドメインサービスを定義します

public interface AirTicketService {
     //ticket demand method

     MonetaryAmount penalty(String ticketNumber);

     void cancel(String ticketNumber, MonetaryAmount penalty);
}

私の質問は、このドメイン サービスを呼び出し、CQRS スタイルのアプリケーションで結果を返すのはどちらの側 (コマンド/クエリ) ですか?

コマンド: CalculatePenlatyCommand を使用したいのですが、このようにドメイン モデルを再利用するのは簡単ですが、このコマンドは状態を変更しないため、少し奇妙です。

または、これがクエリの場合、チケットの readmodel を取得する必要がありますか? しかし、コマンド側とクエリ側の両方で同じ DomainService が必要です。これも奇妙です。

ドメイン派生はクエリですか?

4

3 に答える 3

1

ペナルティ計算コマンドはまったく奇妙ではないという議論を持ち込むことができます。ユーザーはシステムに何かを要求します -コマンドで十分です。

ドメインでペナルティ計算要求イベントイベントを開催することもできます。ある時点で、たとえば、よくわからないクライアント、チケットをキャンセルしたいが毎回気が変わるクライアントなどに関心があるかもしれないからです。計算は非同期的に実行されることもあります - 結果を提供できます (ペナルティコスト) )その後、さまざまな方法でユーザーに...

または、別の方法で:チケットを予約したイベントで、ストアのキャンセル ペナルティも適用されます。その後、再計算する必要なく、いつでもその値にアクセスできるようにすることができます...しかし、これは間違っている可能性があります (?) ペナルティは時間に大きく依存するためです (チケットをキャンセルするのが遅れるほど、支払う金額が高くなります) ?

これらすべてが過度の複雑さなどを必要とする場合、rmacの答えにも同意すると思います:)

于 2014-01-03T21:05:31.123 に答える
1

コマンドクエリ パイプラインにすべてを押し込む必要はありません。コマンドを発行したり、読み取りモデルに問い合わせたりすることなく、UI から独立してこのサービスをクエリできます。

于 2013-09-23T08:36:02.537 に答える