「わかる!ドメイン駆動設計」を読みました

技術書典"4"で購入して読んだものの要旨が書けてなかったので書きます。

booth.pm

TOC

  • はじめに
  • プロローグ
  • 目次
    • DDDってなに?
    • ユビキタス言語ってなに?
    • ドメインモデル
    • 境界づけられたコンテキストって?
    • コンテキストマップ
    • コンテキストマップを活用する
  • エピローグ
  • 著者紹介

はじめに, プロローグ

  • 本書はドメイン駆動設計(DDD)の解説書。
  • 入門に必要な知識をわかりやすく、物語を通じて理解できる
  • 主人公もちこちゃんが出会った問題について、ソフトウェアモデルを設計していく

DDDってなに?

  • ソフトウェア開発手法で、ソフトウェアモデルを設計する手助けとなる手法。
  • どのように設計していくかという理論、考え方、概念。特定の技術的なパターン集ではないし、明日から使えるノウハウ集でもない。難しい
  • この本はDDDの概念を正しく理解し、噛み砕くことを助けるためのもの。本書だけではDDDを理解できない。エリック・エヴァンスのドメイン駆動設計や実践ドメイン駆動設計も読もう。

用語についての解説やコラムあり。省略。

ユビキタス言語ってなに?

  • ドメインエキスパートやソフトウェア開発者を含めたチーム全体で作り上げる共通言語のこと。
  • チームで共通する言語として最善の用語を見つけていくことで、同じものを指しているのに異なる呼び方をされているものが存在することを防ぐ。
  • ドメインエキスパートの話す言葉を観察し、用語やフレーズを発見していく。
  • 発見した用語について議論し、ユビキタス言語として確立する。

ドメインモデル

  • ドメインを適切に表現したもの。コードに落とし込む前の、より概念的なモデル。
  • チームメンバー全員が同じものを思い浮かべ、同じ解釈をするもの。
  • ドメインを反映したものとしてドメインモデルがあり、ドメインモデルを表現したものとしてソフトウェアモデルがあり、ソフトウェアモデルを実装したものとしてオブジェクトモデルがある。

ドメインモデル貧血症

  • ドメインモデルがただのgetter, setterの集まりになってはいけない。意図を反映する。

境界づけられたコンテキストって?

  • ドメインとはユーザーがプログラムを適用する業務の領域や業務を進めるための方法。
  • ドメインサブドメインに分割される。会計のソフトウェアが簿記の機能、印刷の機能、グラフ表示の機能を持つようなイメージ。
  • 境界づけられたコンテキストとは、ユビキタス言語が成り立つ範囲のこと。この文脈ではAはBを意味する、といったときの範囲にあたる。この境界はドメインモデルがどこに属するかを明示的に示す。
  • この境界を見つけ、ドメインモデルの所属する範囲を定める。

コンテキストマップ

  • 境界づけられたコンテキストとそれらの関係性を描いたもの。
  • 現状を正しく表現することが重要。理想的な地図を描くことが目的ではない。

コンテキストマップを活用する

  • ドメイン駆動設計では、境界づけられたコンテキスト間の関係性として8つのパターンが紹介されている。
    • これは元の本を参照したほうが良さそう。

エピローグ

次回に続く。次回、あるのか?楽しみ。

感想

元の本を読みたいと思っていたところだったので手にとってみました。エリック・エヴァンスのドメイン駆動設計や実践ドメイン駆動設計を読むための足がかりとしてよかったです。ドメイン駆動設計をなんとなくわかった気になれました。ただ、わかった気になれただけで全然わかってないので、やはり元の本を読むことは必須。

また、事例が非常にありがちで、読んでいて身につまされる思いです。