よしだのブログ

サブタイトルはありません。

入門!ドメイン駆動設計(今更かい!)

ホットエントリに上がっているドメイン駆動設計ですがなかなか手を付けられずにいたテーマでした。

Developers Summit 2014 で「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」という内容で発表してきました - sifue's blog

Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスク...

入門!というわけで、ドメイン駆動設計(Domain Driven Development 以下、DDD)について、動画を2本見たのでメモと感想を共有します。

20110409_DevLOVE「実践! ドメイン駆動設計」_増田亨さん

  • DDDのメリット・デメリットを教えてくれる。
  • もっとも重要な仕事はドメインモデルの設計である
  • 簡単に安全に変更ができるようになる。
  • あんまり変更する前提のないソフトウェアであるならば、手間がかかるだけでやめたほうがいいかも。
  • DDDでない開発の問題
  • ソフトウェアが業務の知識を間違って記述している、業務の関心ごとと技術の感心事が分離できていない。
  • ソフトウェアは動いているが正しくない
  • そもそも 業務の関心ごとに、開発者が関心が無いから
  • ドメインモデルはクラス図で表現する。
    • コードを直したらクラス図も更新する。
    • ドメインだけなら運用も回る。
  • ドメインモデルの情報源
  • ドメインエキスパート、大変だけど。。
  • ホームページ、解説本、既存システムの画面と実データ
  • 解説本の章立て
  • DDD的コードリファクタリング
  • プレゼンテーションとドメインの分離
  • 手続き的な設計からオブジェクトへ
  • 条件記述からメソッドを抽出
  • コレクションのカプセル化
  • 値をオブジェクトに置き換える
  • ファウラーのリファクタリング本はドメインが書いてある。ぜひ読みなおすべき。

感想

開発者が業務に寄り添っていないという指摘はチクリときた。プロジェクトをリードすることが多くなった立場としては、望まずアサインされて参加してくるような開発者にどう興味を持ってもらうかも課題かと思った。リファクタリングとオチの設計例は、かなり美しい、一見の価値あり。

20110409_DevLOVE「Building Blocks」_都元ダイスケさん

  • DDD の設計の基本を教えてくれる。
  • DDD はパターン言語。(GoFとかPoEAAとか)
  • ユビキタス言語。言葉、単語、概念を統一しよう。
  • ドメインとは、ソフトウェアが解決しようとする課題の領域のこと。
  • モデルとは、実体、事物がある概念のこと。
  • ドメインを形作るモデルを作りましょうってこと。きちんと、他の層(UI層やDAO層など)を分けて設計しよう、ということ。
  • モデルは ENTITY / VALUE OBJECT / SERVICE に分けて表現する。
  • Lifecycle は FACTORY と REPOSITORY で管理。
  • DDDは考え続けるためのパターンです。

感想

基本的な考え方を抑えることが出来ました。話も分かりやすいので、入門用にいい動画でした。E と VO の違いなどが面白かったです。Lifecycle についてはちょっとわかりにくかったので追加で勉強が必要です。実際に使うにはサンプルのコードや、その他のパターンも抑えておく必要があるかなと思います。やっぱ本買うかなー。 層ごとにeclipseプロジェクトなり jar を分けるのは、循環参照ができなくなるのでいいテクニックかも知れない。

おまけ

長めの公演は、youtube だと1.5倍速で見るとさっくり見れていいね! それにしても3年も前の動画かー・・勉強不足だ。

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)