daisuzz.log

関数型ドメインモデリングを読んだ

ずっと気になっていたが読めていなかった「Domain Modeling Made Functional」の日本語訳が6月に発売されたので読んだ。

原著は2018年に発売されている Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F# by Scott Wlaschin

この本は以下の三部構成になっており、特に第二部, 第三部で紹介されている、関数型のエッセンスを取り入れたドメインモデリングや実装が今までのドメイン駆動設計の書籍と違う点になっている。

第一部「ドメインの理解」は、ドメイン駆動設計とはなにか、その中でも戦略的設計に位置付けられる境界づけられたコンテキストやユビキタス言語といった考え方を紹介している。全体的にとてもわかりやすい日本語で丁寧に解説されているので、ドメイン駆動設計の初学者でも理解しやすい内容になっているのが良かった。 ドメイン駆動設計を「ドメインの分析→モデルの作成→モデルの実装」というステップにわけ、それぞれの変換作業を別の作業として捉えている点もわかりやすい。

第二部「ドメインモデリング」は、関数型のエッセンスを使ってドメインモデリングを行う方法が紹介されている。具体的には代数的データ型の直積/直和をつかって型でドメインロジックを表現する方法や、ワークフローを型で表現する方法が紹介されている。

個人的には、以前OOC2024で以下の発表を聞いて代数的データ型をつかった実装に興味があったので、この直和/直積の考え方を使ってドメインロジックを型で表現する、という方法を具体的なコード例を使って学ぶことができた点がとても良かった。

speakerdeck.com

第三部 「モデルの実装」ではF#を使って実際にドメインモデルから実装をしていく流れや具体的なコードが紹介されている。 カリー化における部分適用や、パイピングを使った関数合成など、本に記載された実装ができるプログラミング言語は制限されてしまうが、関数型に強く影響を受けている言語で実際にどうやってモデルを実装に落とし込んでいくのかを知ることができたのが良かった。