TL;DR

  • ドメイン駆動設計(DDD)と関数型プログラミング(FP)を組み合わせた設計の本である。
  • FP の中核となる原則を適用することで、OOP のアプローチよりも柔軟かつ簡潔にドメインをモデリングする手法を学ぶ。

対象読者

説明に使うプログラミング言語は F# だが、静的型付けの関数型言語であれば、どの言語にも応用できる。2024 年 6 月に、日本語版『関数型ドメインモデリング ドメイン駆動設計と F# でソフトウェアの複雑さに立ち向かおう』が発売された。

目次

本書は大きく 3 つのパートに分かれている。

Part I: Understanding the Domain

DDD の背後にある考え方と、ドメインを共有することの重要性を扱う。イベントストーミングのようにドメインを共有する手法や、大きなドメインを独立して実装できる小さなコンポーネントに分割する方法を学ぶ。

  1. Introducing Domain-Driven Design
  2. Understanding the Domain
  3. A Functional Architecture

Part II: Modeling the Domain

ドメインから 1 つのワークフローを取り上げ、関数型の手法でモデリングする。OOP のアプローチとの違いや、型を使って要件を表す方法を学ぶ。ここで書くコードは、ドメインの読みやすいドキュメントであると同時に、残りの実装を載せるコンパイル可能な枠組みにもなる。

  1. Understanding Types
  2. Domain Modeling with Types
  3. Integrity and Consistency in the Domain
  4. Modeling Workflows as Pipelines

Part III: Implementing the Domain

モデリングしたワークフローを実装する。その過程で、関数合成や部分適用、モナドといった関数型プログラミングの一般的なテクニックの使い方を学ぶ。

  1. Understanding Functions
  2. Implementation: Composing a Pipeline
  3. Implementation: Working with Errors
  4. Serialization
  5. Persistence
  6. Evolving a Design and Keeping It Clean

感想

Clojure でも、Spec を活用すれば同じことができそうだと思った。データ指向プログラミングも参考になりそうだ。

関連