TL;DR

  • 関数型プログラミングの主な目的は、内部を見なくても予測でき、理解しやすい関数を扱うことである。そのために副作用、特に I/O を避ける。
  • あらゆる I/O をオニオンアーキテクチャの端に追いやり、データベースへのアクセスはワークフローの開始時か終了時にだけ行う。

内容

関数型プログラミングの目的

関数型プログラミングの主な目的は、内部を見なくても予測でき、理解しやすい関数を扱うことである。そのためには、次のことが必要になる。

副作用には、ランダム性、関数の外にある変数の書き換え、そしてデータベースやファイルシステムの読み書きといったあらゆる種類の I/O が含まれる。コアドメインでは、こうした関数を呼び出さないようにする。

I/O を端に追いやる

では、副作用を避けながら、どうやってデータを読み書きするのか。答えは、あらゆる I/O をオニオンアーキテクチャの端に追いやることである。データベースへのアクセスはワークフローの内部では行わず、ワークフローの開始時か終了時にだけ行う。

これにより、異なる関心事を分けられる。コアドメインはビジネスロジックだけを対象にし、永続化などの I/O はインフラストラクチャの関心事になる。これは永続性非依存の考え方とも一致する。永続化の詳細は第12章 永続化を端に追いやるで扱う。

キーワード