Loading...

DDDについて

和田 卓人 (a.k.a id:t-wada or @t_wada)

Press key to advance.

Slides controls, press:

  • and to move around.
  • Ctrl/Command and + or - to zoom in and out if slides don’t fit.
  • T to change the theme.
  • H to toggle syntax highlight.

自己紹介

自己紹介

  • 名前 : 和田 卓人(わだ たくと)
  • ブログ : id:t-wada
  • Twitter : @t_wada
  • github / facebook : twada
  • タワーズ・クエスト株式会社 取締役社長

./../../images/TQ_LOGO_SMALL.png

イベントや参加団体等

  • Developers Summit (通称デブサミ)
  • java-ja
  • asakusa.rb
  • xUnit Test Patterns 読書会
  • Shibuya.js
  • TDD Boot Camp
  • DevLOVE

普段やっていること

  • 商用 Rails プラグイン(自社製品)の開発
  • テスト技術のコンサルティング
  • TDD の啓蒙
  • Twitter, facebook

gihyo.jpの連載

  • 「動画で解説」和田卓人の"テスト駆動開発"講座
  • http://gihyo.jp/dev/serial/01/tdd
  • 全20回すべて動画付き解説
  • ニコニコ動画でも見れます

./../../images/gihyo-tdd-icon.png

これまで書いたもの

  • WEB+DB PRESS vol.35
  • WEB+DB PRESS vol.37
  • WEB+DB PRESS vol.42
  • WEB+DB PRESS vol.49
  • その他いろいろ
  • 『プログラマが知るべき97のこと』

プログラマが知るべき97のこと

プログラマが知るべ 97 のこ

#97prog_ja

エリック・エヴァンスのドメイン駆動設計

#DDDjp

おめでとうございます!!

DDDとの出会い

DDD の立ち位置

アナリシスパターン

UMLモデリングのエッセンス

OOSE

GoF

POSA

OOSC

PoEAAbook

PoEAAからDDDへ

./../../images/martinfowler.jpg オブジェクト指向設計の入門書的なものを探しているのなら、 [Larman] を推奨する。ドメインモデルの例を探しているのなら、 [Fowler AP] が参考になるだろう。 [Hay] にもリレーショナルコンテキストの優れた例が紹介されている。優れたドメインモデルを構築するには、オブジェクトに関する概念的な考え方を理解しておく必要がある。これについては [Martin and Odell] を勧める。豊富なドメインモデルやその他のオブジェクト指向システムで見られるパターンを理解するには、必ず [GoF] を読んでおくべきである。 Eric Evans も、最近では、ドメインモデルの構築に関する書籍 [Evans] を執筆中だ。私は本書執筆中のためまだ初期段階の原稿しか見ていないが、内容はかなり充実しているようである。

(エンタープライズアプリケーションアーキテクチャパターン p.127)

Data Model Patterns

Data Model Resource Book

ストリームラインオブジェクトモデリング

児玉さんの本

オブジェクトデザイン

DDD はパターン本

それゆえ: (Therefore:)

第1部の骨格

  • Ubiquitous Language(ユビキタス言語)
  • Model-Driven Design(モデル駆動設計)
  • Hands-On Modelers(実践的モデラ)

ユビキタス言語

モデルを言語の骨格として使用すること。チーム内のすべてのコミュニケーションとコードにおいて、その言語を厳格に用いることを、チームに約束させること。 図や文書、そして何より会話の中では同一の言語を使用する こと。 言語を使う上で問題があれば、代わりの表現を用いて実験することで、問題を取り除くこと。そうした表現は代わりとなるモデルを反映している。そこで、新しいモデルに合わせてコードをリファクタリングし、クラス、メソッド、モジュールの名前を変更すること。会話の中で用語が混同されていたら、普通の単語の意味について認識を合わせるのと同じやり方で解決すること。 ユビキタス言語における変更は、モデルに対する変更である と認識すること。

モデル駆動設計

ソフトウェアシステムの一部を設計する際には、 紐づけ が明らかになるように、ドメインモデルを文字通りの意味で忠実に反映させること。モデルについて再検討し、より自然にソフトウェアに実装されるように修正すること。これは、ドメインに対するより深い洞察を反映させようとする時にも言える。強固なユビキタス言語を支えることに加えて、 ドメインと実装両方の目的に使える単一のモデル を要求すること。 設計で使用する用語法と責務の基礎的な割り当てをモデルから引き出すこと。 コードはモデルの表現となる から、コードに対する変更はモデルに対する変更になるかもしれない。その影響は、プロジェクトの他の活動全体へと適宜伝わっていかなければならない。 実装を一分の狂いもなくモデルに結びつける には、通常、オブジェクト指向プログラミングのようなモデリングパラダイムをサポートする、ソフトウェア開発のためのツールと言語が必要である。

実践的モデラ

モデルに貢献する技術的な人は だれでも 、一定の時間を コードに触れる ことに費やさなければならない。プロジェクトで主に果たしている役割が何であれ、そうしなければならないのだ。 コードの変更に対して責任を負う人はだれでも、コードを通してモデルを表現することを習得しなければならない。 すべての開発者は、モデルに関する議論にいずれかの段階で参加して、ドメインエキスパートと話をしなければならない。その他の方法で寄与する人々は、ユビキタス言語を通じてモデルに対する考え方をダイナミックに交換する際に、コードに触れる人々を意識して巻き込まなければならない。

人月の神話

./../../images/2001_frederick_brooks.jpg しかし、 データやテーブルの表現をやり直すことで戦略的突破(ブレークスルー)が実現される 場合の方がはるかに多い。ここにこそ、プログラムの真髄がある。私にフローチャートだけを見せて、テーブルは見せないとしたら、私はずっと煙に巻かれたままになるだろう。逆に テーブルが見せてもらえるなら、フローチャートはたいてい必要なくなる。 それだけで、みんな明白に分かってしまうからだ。

(第9章 p95 「表現はプログラミングの本質である」)

DDDはどうか

./../../images/ericevans.jpg まず、我々は プロシージャをモデルの主要な側面にしたくない のだ、ということで意見を一致させよう。 オブジェクトは、手続きをカプセル化し、その代わりに目標や意図について我々に考えさせるために存在する。

ここで述べるのは、ドメインに存在するプロセスについてである。これはモデルの中に表現されなければならない。このようなプロセスが姿を現すと、オブジェクト設計はぎこちなくなりがちだ。

(第9章 ドメインオブジェクトとしてのプロセス)

さて、DDD 前夜祭、陽の巻

お題としては悩ましい

DDDBCへようこそ

優しくDDDを教えます

ペアモデリング体験

モデルレビュー大会

お題

「DDD 前夜祭の申し込みをモデリングしよう」

DDD 前夜祭の申し込み

  • イベントのキャパシティ
  • 会場のキャパシティ
  • キャンセル
  • 申し込みタイムリミット
  • スタッフ申し込み
  • ズボラな登壇者
  • セッション選択の制約は? (陰陽)

(制約をどうモデリングするか?)

おわりに

たくさん本を読もう

写経しよう

DDDはスキルです

モデリングや DDDは スキル です。つまり…

  • 才能ではなく、習得可能です
  • 量は質に転化します
  • 写経しましょう!!

ご清聴ありがとうございました