『Domain Modeling Made Functional』を読んだ

ドメイン駆動設計は関数型言語でも上手くできるよ、という本。

ドメイン駆動設計や関数型言語に馴染みのない人にも理解できる程度に、初歩的なところから説明されている。例として取り上げるシステムも、お客さんから注文を受けたら商品の合計価格を計算して請求書とメールを送る、といった小さな規模のものになっており、大規模な業務システムが登場して気圧されることが無いのも良いところだと感じた。一方で、ドメイン駆動設計も関数型言語もある程度習熟しているから組み合わせ方だけ知りたいよ、という人にとっては読むべきところが少なく、物足りなく感じるかもしれない。

なぜ関数型言語でやるのかについては、次のような主張が感じられた。

  1. ドメインエキスパートが読めるようなプログラムを書くべきだ
  2. そのためには、入出力の形式やエラーの有無など、物事の依存関係がわかりやすく明示されるスタイルでプログラムを書くべきだ
  3. そして関数型プログラミングには、型などを使ってそれらを明示するための技法や考え方が多く備わっているから、この用途に適している

プログラミングパラダイムというのは、単にスタイルの問題だけではなく、何を重視するか・何を軽視するかという考え方の問題でもあるから、入出力や依存関係をより重視する傾向にある関数型プログラミングと相性が良いという主張には、たしかに理があるように感じられた。例えば自然言語の場合でも、日本語で考えるときと英語で考えるときとでは思考過程に大きな違いがあるから、関数型の考え方でモデリングすることでまた違った結果が得られるだろうということは、想像に難くない。

不正な状態を取り得たり、コードで説明できていない暗黙的な挙動を含んだりしないようにプログラムを組み上げることが本当に大事である、という考え方が本の中で徹底されており、これも著者の強く主張したい部分なのだろうと感じられた。この辺りは特定のプログラミングパラダイムに限定される話ではないので、明日から適用できそうな考え方な一方で、「とはいえうちで使ってる言語、Result型とか使う慣習無いんですが……」といった問題はままあり、現実で恩恵にあずかるためには更に考えていくべきことが幾つかあるように感じられた。

Amazon.co.jp: Domain Modeling Made Functional