関数型ドメインモデリング ドメイン駆動設計とF#でソフトウェアの複雑さに立ち向かおう
日本語版出版に際し、訳者の猪股さんにご恵贈いただきました。ありがとうございます!
すでに原著の『Domain Modeling Made Functional』を読んでいて、そのときの感想は以前に書いたとおり。そこからの差分としては、はてな社内でこの本の輪読をはじめたこと。輪読がはじまったその週に日本語版の出版が告知され嘆息する一同でしたが、日本最速で輪読を開始できたのは間違いないと思う。
この本の特徴をひとつ挙げろと言われれば、実装に使われている言語がF#であること、というのが大方の回答になるとおもうが、一方でこの本をやるのにF#を実践する必要はない、と考えている。そういうわけで今回輪読における実装言語にはGoとTypeScriptを指名しており、その後Scala勢力も増えたのだけど、進度的には実際にコードを書きはじめるのはもうちょっと先なので、このへんの結末についてはまた別の機会に書くつもり。
巷の本でドメイン駆動設計(DDD)を学ぼうとすると、Javaのようないわゆるオブジェクト指向言語がその実践言語として選ばれていがち(※主観)で、するといきおいその言語特有の事情までDDDの知識であるかのように見えてしまう弊害がある。
関係しそうな話:
Value Objectについて整理しよう - Software Transactional Memo
ウェブ開発においてはふだんGoなりTypeScriptなり、Javaのようなオブジェクト指向ではないが、関数型と呼べはしない言語を使っている、そんな我々が『関数型ドメインモデリング』を読むことに価値があると思っているのは、そういう点だ。
この本においてはF#は一種の理想的な例として描かれていると見ていて、必ずしもF#を使おうと喧伝している本ではない。この本の要点を強引にまとめると、
- ドメインモデルを型に落とし込みプログラム中のモデルが現実に起こり得ない状態を表すことを許さない、
- 副作用のないワークフローでドメインロジックを実装する
という点にある。これをF#はどうやらうまくやってのけるらしいとわかる。だけどこれをソースコードレベルで一言一句信仰するのではなくて、普段の言語における実践的な適用にどう落としこむかが、読者の宿題だ。パラダイムの違う言語を通して見ることで、そのエッセンスがより研ぎ澄まされて見えてくるのだと思う。
というわけでこの本がいよいよ日本語で読めるようになって、たいへん喜ばしく思っている次第です。F#にこだわりすぎずに読むのがオススメ。