次のアーキテクチャ(レイヤー)を持つSpringバッチを使用してバッチアプリケーションを設計しています:
- すべてのスプリング バッチ コード (ファイルの読み取り、処理、および書き込み) を配置する最上位モジュール。この最上位モジュールは、特定の形式のファイルに固有です。したがって、将来的には、新しいフォーマットの読み取り/処理/書き込みができる新しい並列モジュールを作成する可能性があります。形式に関係なく、ファイルの各行は実行する特定の操作に対応しています。たとえば、各行は「行項目 X を注文 Y に追加する」操作を表す場合があります。そのため、各行について、読み取りと処理が完了したら、すぐ下のレイヤーの必要な操作を呼び出すカスタム ItemWriter を使用します。
- さまざまなバッチ操作を実装するビジネス ロジック層。これらの各操作は、ドメイン層オブジェクトを使用して実装されます。たとえば、「Add line ite; X to order Y」操作は、OrderRepository を使用して注文を取得し、次に注文の addLineItem メソッドを呼び出すことによって実装されます。
- すべてのドメイン オブジェクトを含むドメイン レイヤー。前の例に続いて、Order エンティティと LineItem エンティティがあります。
私の質問は次のとおりです。
- 最上位モジュールとビジネス ロジック層の間のインターフェイスに使用するベスト プラクティス (おそらく特定の設計パターン) はありますか?
- 各ファイルには 1 つの注文のみの行が含まれていると仮定しましょう。各行を記述する単純な方法は、行ごとに 1 つのバッチ操作を呼び出すことです。この場合、各行に対して OrderRepository への呼び出しが実行されて注文が取得され、注文が保存されます。行がチャンクごとに書き込まれる別のアプローチを考えています (Spring バッチで行うように)。書き込み操作が受け取る引数の型は List です。この 2 番目のアプローチに従って、関連する注文にチャンクを追加するために必要なデータをビジネス オペレーションに渡す必要があります。トップ モジュールとビジネス ロジック層の間で情報を渡すために使用するフォームはどれですか?
ありがとう