書籍 Domain Modeling Made Functional – ドメイン駆動設計したい人に読んでほしい

投稿者:

純粋なF#を学ぶ本というよりは、F#を実際の開発に導入するための本ですね。特に、ドメイン駆動設計を関数型言語のF#で行うにはどのようにすればよいかが書かれている本です。この本を読んだあとの正直な感想としては、ドメイン駆動設計を行う上で、オブジェクト指向である必要は全然ないのではないか、と思えました。

私もそうなのですが、ドメイン駆動設計がうまく行かない理由の一つに、実現方法に注意が行き過ぎて、本来実現したいはずである、業務とコードの関係を保つ部分がおろそかになってしまうことがあると思っています。業務のドメインを明確に分ける前に、Entity, Value Objectの実装はどうだとか、レイヤー化されたアーキテクチャをどのように実装するか、という話が多くなってしまうわけです。こういう話は当然大事なのですが、先にそもそもドメインの理解・適切な分割があり、その上でドメインをいかにモデルに落とし込むか、などの大きい話があるのだと思います。
ドメイン駆動設計の書籍として、エリック・エヴァンスの書籍が有名なのですが、エリック・エヴァンスの書籍は最初の方にドメイン駆動設計を行うための技術要素を割と早い段階で紹介します。そのため、記憶に残りやすい技術要素を先行してしまうのかもしれません。そういった意味では、必要に応じて技術要素が出てくる実践ドメイン駆動設計を先に読むのがよいのかもしれません。

話はそれましたが、F#本に戻ります。F#の本では、対象のドメインを、ひたすら型で定義していきます。代数的データ型によって状態管理を型に落とし込むことができますし、代数的データ型を含む強力な型システムのおかげで、make illegal state unrepresentable (ありえない状態が表現できない)という考え方ができます。

F#もクラス定義ができる程度にはオブジェクト指向の要素もあるのですが、この本においては基本的にクラスは出てこず、代わりにレコード型で表現します。オブジェクト指向の場合、データと操作(メソッド)をまとめてクラス化しますが、強力な型システムを持つ関数型言語の場合、データと操作(関数)が同じクラス内に閉じ込められている必要性はないためなのでしょう。

F#はどちらかというと、知名度の割に開発現場での採用が少ない言語だと思います。オブジェクト指向がよくて関数型言語は難しいという考えに立った場合、F#が選ばれないのは仕方ないかもしれません。ですが本書をざっと読んだあと、私同様「ドメイン駆動設計を行う上で、オブジェクト指向である必要は全然ないのではないか?」となるかと思います。ドメイン駆動設計を行う上での技術面に関する話題も豊富でした。F#で開発する際のイメージも非常に付きやすいです。

ドメイン駆動設計の初心者も経験者も、一度読んでみてほしい、とてもいい本だと思いました。

唯一の弱点は、洋書ということですかね…
私に英語力があれば、翻訳して日本向けにも出版したいレベルに思いました。

いきなり洋書いけるか?と不安な方は、著者サイトから、記事や動画を見てみるとよいかもしれません。

https://fsharpforfunandprofit.com/