2

私は、次のアーキテクチャ(層)を持っている春のバッチを使用してバッチ・アプリケーションを設計しています:バッチおよびビジネスレイヤ通信

  • 私はすべての春のバッチコードを置くトップモジュールを(ファイルを読み込み、処理と書き込み)。このトップモジュールは、ファイルの特定の形式に固有です。したがって、私は将来、新しいフォーマットを読み込み/処理/書き込むことができる新しい並列モジュールを持っているかもしれません。形式とは無関係に、ファイルの各行は、実行する特定の操作に対応しています。たとえば、各行は、「Yを注文するためにラインアイテムXを追加する」という操作を表すことができる。したがって、各行について、読み込みと処理を終えた後、すぐ下のレイヤーの必要な操作を呼び出すカスタムItemWriterを使用します。
  • 異なるバッチ処理を実装するビジネスロジックレイヤー。これらの操作のそれぞれは、ドメイン・レイヤー・オブジェクトを使用して実装されます。例えば、「ラインを追加する; XをYにオーダーする」オペレーションは、OrderRepositoryを使用してオーダーを検索し、次いでそのオーダーのaddLineItemメソッドを呼び出すことによって実施される。
  • すべてのドメインオブジェクトを持つドメイン層。前の例の後に、私はOrderとLineItemエンティティを持っています。

私の質問は以下のとおりです。

  • トップモジュールとビジネスロジック層との界面に使用することがベストプラクティス(多分特定のデザインパターン)がありますか?
  • 各ファイルに1つのオーダの行しか含まれていないとします。各行を書くための単純なアプローチは、1行につき1つのバッチ操作を呼び出すことです。この場合、各行について、OrderRepositoryへの呼び出しが行われて注文を取得し、注文が保存されます。私は行がチャンクで書かれている別のアプローチについて考えています(Springバッチと同様)。書き込み操作の引数は、List型です。この2番目のアプローチの後、チャンクを関係するオーダーに追加するために必要なデータをビジネスオペレーションに渡す必要があります。トップモジュールとビジネスロジック層の間で情報を渡すために使用するフォームはどれですか?

おかげ

答えて

3

トップモジュールとビジネスロジック層との界面に使用することがベストプラクティス(多分特定のデザインパターン)がありますか?

がすでにベストプラクティスを知らために異なる本当のベストプラクティスは、ありませんが、バッチは、多くの場合、性能要件/制約に対処する必要があり、さらに多くの場合、パフォーマンスの問題を生成するので、私のベストプラクティスです私の知る限り:

  • データとデータフローについて考える
  • どのくらいのデータですか?
  • ボトルネックは何ですか?あなたの作家やビジネス層の界面

    1. がbusinessLayerを使用することができItemWriterAdapterを、使用のためのいくつかのインスピレーションを得た(執筆対処理、多くの場合、書込部)

。addOrderItem方法

  • は作家に、独自のラッパー
  • 移動ビジネス層を書き、バッチの再利用のための本当の必要性は、私はオプション2となるだろうほとんどビジネス層
  • が最適化されていません、それは

    ItemWriter wrapp :-)特定の要件に依存していつものようにバッチコンテキストで私はリストやバッチSQL

    を使用したいと思いますので、例えばER

    public class SimpleItemWriter implements ItemWriter<SimpleItem> { 
    
        @Override 
        public void write(List<? extends SimpleItem> items) throws Exception {   
         // do something, e.g. delegate to another spring bean 
        } 
    } 
    

    ItemWriterAdapter構成例

    <bean id="sample-item-writer-adapter" class="org.springframework.batch.item.adapter.ItemWriterAdapter"> 
        <property name="targetObject" ref="businessLayerBean" /> 
          <property name="targetMethod" value="doSomething" 
    </bean> 
    
    <step id="splitFilesStep"> 
        <tasklet> 
         <chunk 
          reader="itemReader" 
          writer="sample-item-writer-adapter" 
          commit-interval="5"> 
         </chunk> 
        </tasklet> 
    </step> 
    
    関連する問題