2

私は航空予約プロジェクトに取り組んでいます。

下の画像は、これまでに開発したドメイン モデルを示しています。

ここに画像の説明を入力

予約、発券、その他の操作をカプセル化するドメイン サービス (AirBookService) を定義します。当社のサプライヤーは、これらのリクエストを処理するための Remote-Procedure-Call API を提供しているため、腐敗防止レイヤーを追加してドメイン サービスを実装しています (当社には複数のサプライヤーがあります)。

この解決策は、価格の取得などの無限の rpc 呼び出しを処理する場合にうまく機能します。ただし、非無限の rpc 呼び出しを処理する場合にはリスクがあります。

例えば

public class TransactionalReservationHandlingServiceImpl .... {
    @Transactional
    @Override
    public void modifyTraveler(String resId, String tktId, AirTravler traveler) {
         AirReservation res = reservationRepository.findBy(resId);
         res.modify(tktId, traveler);
         airBookService.modify(res, traveler);
         reservationRepository.store(res);
    }
}

res.modify() の後ろに airBookService.modify() を配置したので、一部のローカル ドメイン ロジックが壊れた場合に rpc 呼び出しを回避できます。しかし、rpc 呼び出しが成功し、ローカル トランザクションが失敗した場合はどうなるでしょうか。私たちのアプリケーションの旅行者とサプライヤーのアプリケーションの旅行者の間に不一致があります。

別のトランザクションで rpc 呼び出しとローカル変更を処理する価値はありますか?

私の懸念は次のとおりです。

a)そうすると、確かに余分な複雑さが生じます。メッセージのように。
b) イベント処理の経験があまりありません。
c) トランザクション境界で rpc 呼び出しを使用しても、失敗の可能性は非常に低く、主に並行性の問題が原因であり、現実の世界では AirReservation の競合は比較的低いです。

以下は私のイベントの試みです:

    @Transactional
    @Override
    public void modifyTraveler(String resId, String tktId, AirTravler traveler) {
         AirReservation res = reservationRepository.findBy(resId);
         ModifyTravelerEvent event = airBookService.modify(res, traveler);
         handlingEventRepository.store(event);
         events.notifyTravelerModified(event);// using messaging
    }

    @Transactional
    @Override
    public void modifyTraveler(String eventSequence) {
         ModifyTravelerEvent event = handlingEventRepository.of(eventSequence);
         AirReservation res = reservationRepository.findBy(resId);
         event.handle(res);
         reservationRepository.store(res);
         handlingEventRepository.store(event );
    }

利点は、ローカルの変更が rpc 呼び出しから分離されることです。1. 複数のリソース管理の問題 (データソースとメッセージング) 2. 旅行者の変更、チケットの要求、およびその他の AirBookService 操作のために、多くのアドホック イベントを作成する必要があります。

私はジレンマに陥っています。現在のデザインに満足せず、新しいイベント デザインには非常に躊躇しています。

どんなアイデアでも大歓迎です、事前に感謝します。

4

1 に答える 1