TL;DR
- ドメイン駆動設計(DDD)と関数型プログラミング(FP)を組み合わせた設計の本である。
- FP の中核となる原則を適用することで、OOP のアプローチよりも柔軟かつ簡潔にドメインをモデリングする手法を学ぶ。
対象読者
説明に使うプログラミング言語は F# だが、静的型付けの関数型言語であれば、どの言語にも応用できる。2024 年 6 月に、日本語版『関数型ドメインモデリング ドメイン駆動設計と F# でソフトウェアの複雑さに立ち向かおう』が発売された。
目次
本書は大きく 3 つのパートに分かれている。
Part I: Understanding the Domain
DDD の背後にある考え方と、ドメインを共有することの重要性を扱う。イベントストーミングのようにドメインを共有する手法や、大きなドメインを独立して実装できる小さなコンポーネントに分割する方法を学ぶ。
Part II: Modeling the Domain
ドメインから 1 つのワークフローを取り上げ、関数型の手法でモデリングする。OOP のアプローチとの違いや、型を使って要件を表す方法を学ぶ。ここで書くコードは、ドメインの読みやすいドキュメントであると同時に、残りの実装を載せるコンパイル可能な枠組みにもなる。
- Understanding Types
- Domain Modeling with Types
- Integrity and Consistency in the Domain
- Modeling Workflows as Pipelines
Part III: Implementing the Domain
モデリングしたワークフローを実装する。その過程で、関数合成や部分適用、モナドといった関数型プログラミングの一般的なテクニックの使い方を学ぶ。
- Understanding Functions
- Implementation: Composing a Pipeline
- Implementation: Working with Errors
- Serialization
- Persistence
- Evolving a Design and Keeping It Clean
感想
Clojure でも、Spec を活用すれば同じことができそうだと思った。データ指向プログラミングも参考になりそうだ。
関連
- 関数型ドメインモデリング ドメイン駆動設計と F# でソフトウェアの複雑さに立ち向かおう(KADOKAWA)
- Domain Modeling Made Functional(Pragmatic Bookshelf)
- https://zenn.dev/labbase/articles/b1c513c32fe15e
- https://qiita.com/yasuabe2613/items/5ab33e103e4105630e4c
- Domain Modeling Made Functional(koushisa)
- 『Domain Modeling Made Functional』(mrsekut-p)
- Domain Driven Design with the F# type system(Speaker Deck)
- https://www.youtube.com/watch?v=2JB1_e5wZmU
- https://www.youtube.com/watch?v=MlPQ0FsPxPY