私説
DDD本入門

2015/03/06
kbigwheel

ドメイン駆動設計とは

  • エリック・エヴァンスが1990年台頃から
    提唱している設計手法
  • 要件定義から全体設計までの流れにかぎらず、
    開発の進め方まで含めたフレームワークとして
    捉えることができる(設計と開発の融合)
  • DDD本をパターン集だと捉えることもできる

なぜDDDがそんなにもてはやされるの?

  • いまのところ要件定義からコードに落としこむまでのフルスタックフレームワークとして他に競合するまともなものがない
    • アジャイル駆動開発などは近いがコードへどのように落としこむか、までは言及しない
    • ウォーターフォールは変化し続ける要件・環境に適応しえず、またフルスタックとは言いがたい

うちの会社とDDD

  • 社内ではScalaプロダクトでの実践が多い
    • 要因
      • 国内でScalaクラスタとDDDクラスタに重複して
        所属している人が多い
      • Play FrameworkとDDDの相性がいいという意見
  • モバでも主に隣の部署で活発に実践されてるっぽい

が、このDDD本
いざ学ぼうとして独力ですべて
読むのはかなり辛い

  • 厚い(576ページ)
  • 前提としたい本が多い(4,5冊挙げられる)
  • 本の構成(順番・話す粒度)が結構雑(暴言)
    • 基本的にgood practiceを寄せ集めた本なので
      上手く系統だてられてるとは言いがたい
  • 概念的説明が多く、漠然と読んでるだけでは
    ​なにも頭に入ってこない

原典以外で勉強するのも
おすすめできない

一番ベストなのは読書会

  • 一緒に読んでる人と内容を話し合い、イメージするのがいい
  • 経験あるDDD実践者に1人メンターとしてついてもらえばベスト
    • 社内のDDD勉強会は一息つきつつあるが、
      潜在的に勉強したいと思っている人は多数いるはず
    • #dddなどで呼びかけてみるといいかも

どうしても1人で読まざるをえないのなら

DDD本目次

  • 第1部 ドメインモデルを機能させる

    • 知識をかみ砕く

    • コミュニケーションと言語の使い方

    • モデルと実装を結びつける

  • ​第2部 モデル駆動設計の構成要素

    • ドメインを隔離する

    • ソフトウェアで表現されたモデル

    • ドメインオブジェクトのライフサイクル

    • 言語を使用する:応用例

  • ​第3部 より深い洞察へ向かうリファクタリング

    • ブレイクスルー

    • 暗黙的な概念を明示的にする

    • しなやかな設計

    • アナリシスパターンを適用する

    • デザインパターンをモデルに関係づける

    • より深い洞察へ向かうリファクタリング

  • ​第4部 戦略的設計

    • モデルの整合性を維持する

    • 蒸留

    • 大規模な構造

    • 戦略をまとめ上げる

  • 第1部 ドメインモデルを機能させる

    • 知識をかみ砕く

    • コミュニケーションと言語の使い方

    • モデルと実装を結びつける

  • ​第2部 モデル駆動設計の構成要素

    • ドメインを隔離する

    • ソフトウェアで表現されたモデル

    • ドメインオブジェクトのライフサイクル

    • 言語を使用する:応用例

  • ​第3部 より深い洞察へ向かうリファクタリング

    • ブレイクスルー

    • 暗黙的な概念を明示的にする

    • しなやかな設計

    • アナリシスパターンを適用する

    • デザインパターンをモデルに関係づける

    • より深い洞察へ向かうリファクタリング

  • ​第4部 戦略的設計

    • モデルの整合性を維持する

    • 蒸留

    • 大規模な構造

    • 戦略をまとめ上げる

  • 最初は1・2だけ読めばOK
  • 2部が一番エンジニアに取って面白いけど、
    1部の話がところどころ出てくるので、
    1部を軽く流して2部を読むのがおすすめ

この方法の利点と欠点

  • 利点
    • 2部は比較的わかりやすいためモチベーションを保てる
    • とりあえずDDDの話がある程度わかるようになる
  • 欠点
    • 実は2部はDDD的に一番重要度が低い
      • より概念的な1・3・4部がDDDの核心

しかし、原典読んだことあるのと
ないのでは大きく違うので(主に人と話すとき)、
とりあえず読むのは悪くない

DDD本を読む上で
予め知っておくと捗る情報

  • 部・章立てされてるが、基本的にはデザパタ本と同様の
    パターン集
    • パターンをある程度分類・順序付けしたのがDDD本
    • 基本的には以下の体で進む
      1. パターンA: BBBはCCCしろ!
      2. BBBはCCCしろ、の概念的説明
      3. 具体的な例を出して説得力を持たせる
      4. まとめ
  • 他の本のことが引用されたり前提となって話が進む場合があるが、そちらも同じくらい厚いので一旦忘れてDDDを読もう
  • slackやircの#dddを頼ると助けがあるかもね

DDDは今後どうなるのか

  • 発表からそろそろ20年だけどまだまだ黎明期
  • 敷居が高いこともあり普及してるとは言いがたい
  • ただ、パターン集の側面もあるので
    すぐに実践できる項目もあり実用度は高い
  • 勉強できるなら勉強しておいたほうがいいね

おまけ

私説​DDD本入門

By kbigwheel

私説​DDD本入門

  • 1,795