Web サービスにおけるバッチ処理には例えば以下のようなものがある。

いつ処理が落ちても大丈夫なようにトランザクションを貼ったり, 繰り返し実行できる冪等性の担保とかクエリの最適化とか API でも気にするようなところを同じように色々気をつけて実装する必要があって, サービスに依存してるバッチ処理なのでビジネスロジックも絡んでくる。

ビジネスロジックは切り分けたいし, トランザクションの境界はハッキリさせたい。インターフェースによる依存の定義で外部サービスをいつでも切り替えれるようにしたい。テストを効率良く書きたい ... etc その辺を考慮するとクリーン(レイヤード)アーキテクチャがマッチしてるかな〜と考えて実践してみた。

すでに似た事を実践してる記事はあり, 全力でこの記事に乗っかってる。

「Clean Architectureで実装するバッチ処理」についての勉強 - tsuchinaga

アーキテクチャとしてはこんな感じ

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/129d682d-1e71-40f5-b490-829f85ffc64f/91957463-07ef4580-ed41-11ea-945b-e7396ca2f22b.png