2
私は、次のアーキテクチャ(層)を持っている春のバッチを使用してバッチ・アプリケーションを設計しています:バッチおよびビジネスレイヤ通信
- 私はすべての春のバッチコードを置くトップモジュールを(ファイルを読み込み、処理と書き込み)。このトップモジュールは、ファイルの特定の形式に固有です。したがって、私は将来、新しいフォーマットを読み込み/処理/書き込むことができる新しい並列モジュールを持っているかもしれません。形式とは無関係に、ファイルの各行は、実行する特定の操作に対応しています。たとえば、各行は、「Yを注文するためにラインアイテムXを追加する」という操作を表すことができる。したがって、各行について、読み込みと処理を終えた後、すぐ下のレイヤーの必要な操作を呼び出すカスタムItemWriterを使用します。
- 異なるバッチ処理を実装するビジネスロジックレイヤー。これらの操作のそれぞれは、ドメイン・レイヤー・オブジェクトを使用して実装されます。例えば、「ラインを追加する; XをYにオーダーする」オペレーションは、OrderRepositoryを使用してオーダーを検索し、次いでそのオーダーのaddLineItemメソッドを呼び出すことによって実施される。
- すべてのドメインオブジェクトを持つドメイン層。前の例の後に、私はOrderとLineItemエンティティを持っています。
私の質問は以下のとおりです。
- トップモジュールとビジネスロジック層との界面に使用することがベストプラクティス(多分特定のデザインパターン)がありますか?
- 各ファイルに1つのオーダの行しか含まれていないとします。各行を書くための単純なアプローチは、1行につき1つのバッチ操作を呼び出すことです。この場合、各行について、OrderRepositoryへの呼び出しが行われて注文を取得し、注文が保存されます。私は行がチャンクで書かれている別のアプローチについて考えています(Springバッチと同様)。書き込み操作の引数は、List型です。この2番目のアプローチの後、チャンクを関係するオーダーに追加するために必要なデータをビジネスオペレーションに渡す必要があります。トップモジュールとビジネスロジック層の間で情報を渡すために使用するフォームはどれですか?
おかげ