わかる!ドメイン駆動設計〜もちこちゃんの大冒険〜

2020-06-03 DDD

はじめに

DDDに興味があって本読んだりオンライン勉強会に参加するなりして
ちょいちょいDDDの勉強はしています。
DDD自体は概念が大事っぽいので、具体的な題材はなんだっていいのですが、
それにしてもWebアプリベースの話が多いかなという感触です。
Androidベースの話の方がわかりやすいかなと思い表題の書籍を読んでみました。

感想

本当にDDDの入り口の部分の説明であり、中身もそこまでありません。
Androidベースの話でもなかったので、DDDってなんだ?くらいの人がターゲットだと思われます。

1.5 DDDの要素

  • 戦略的設計

    • ユビキタス言語

    • 境界づけられたコンテキスト

    • コンテキストマップ

  • 戦術的設計

    • エンティティ

    • 値オブジェクト

    • レイヤー化アーキテクチャ

戦略的設計と戦術的設計を組み合わせることでより効果を得られる

2.1 ユビキタス言語

ドメインエキスパートやソフトウェア開発者を含めたチーム全体で作り上げる共通言語のこと

2.6 ユビキタス言語の確立

  • ドキュメントや会話から探す

    • 同じものを表す言葉が複数ある

    • 概念はあるのに名前がない

  • 「食品」といった名詞の単語だけに注目しがちだが、「アプリに食品を登録する」といった振る舞いにも注目する

抽出したものはチームで議論してユビキタス言語とする

3.1 ドメインモデル

コードに落とし込む前のドメインを反映した概念的なモデルでありユビキタス言語で構成される

3.2 モデルの振る舞いを設計する

  • 「食品」でも①登録のための情報の入れ物と②登録された食品では概念が異なる
    別のモデルとして考える。結果、高凝縮に繋がりそうだと思った。

  • ドメインモデルは育てるもので、変更はユビキタス言語にもフィードバックして一緒に育てていく フィードバックのサイクルを回すことでユビキタス言語、ドメインモデル共に育てることで
    ビジネスの変化に適応しやすいソフトウェアになっていくかなと思った。

4.2 境界づけられたコンテキストとは

  • ユビキタス言語が成り立つ範囲

賞味期限管理での食品は賞味期限を持っているが、レシピ検索での食品は賞味期限を持っている必要がない
賞味期限管理とレシピ検索は別々の境界づけられたコンテキストである