大阪DDD読書会モデリングワークショップ
vol.1 ガイダンス
2014/8/3 #dddosaka by @kuma_nana
今日の流れ•ガイダンス、お題説明
•ペアワークでモデリング(全員)
•2組程度発表
ガイダンス
ドメイン駆動設計 おさらい
根幹となる2つのパターン表紙裏ナビゲーションマップ参照!
ユビキタス言語:ドメインモデルを取り巻いて構築され、チームのあらゆる活動をソフトウェアと結びつけるために、チームメンバー全員によって使用される言語(p.520)!!
モデル駆動設計:ソフトウェア要素のサブセットがモデル要素と密接に対応している設計。また、相互に一致した状態を保ちながら、モデルと実装を共に開発するプロセス。(p.519)
問題空間と解決空間!
!
!
!
!
!
!
!
[※1]
ソフトウェア開発の モデル
ソフトウェア開発のモデル!
!
!
!
!
!
!
!
[※2]
ソフトウェア開発のモデル!
!
!
!
!
!
!
[※2]
モデリング
モデリングの流れ1. 業務分析をしてシステムの全体像を把握する(要求の収集) ↓2. ドメインモデリング !これらは、工程として独立しているのではなく、行き来を繰り返しながらそれぞれ洗練させていくことになる
業務分析ってどうやるの?特に決まりは無いです。例:・システム概要図・「三要素分析法」業務フロー図 [※3]・マインドマップも良いですね!
!
システムの目的、全体像をつかむ。
ドメインモデリングって?3つのモデリングツール (スターターキット)[※1]!!
1. ドメイン辞書2. ユースケースモデル3. 概念モデル!!これらは独立している工程ではなく、行き来しながらそれぞれ洗練させていく。※決まりは無いので、できる人は好きなやり方でどうぞ!
1. ドメイン辞書を作るドメイン知識の基盤。ドメインで利用されている言葉をピックアップ、認識を共通化。
!
• モノ: 識別する必要があるもの、データ !
• コト: 動作、振る舞い、制約
2. ユースケースを書く- システムユーザーとシステムとの間の典型的なやり取りを記述したもの。システムがどのように使われるかをストーリーとして提供。- システムユーザー:人間 or 外部システム。- ユビキタス言語の検証!
!
ユースケースのタイトル(~~する) !
内容(自由な文章)・・・
2. ユースケースを書くユースケースにはレイヤーがある。アプリケーションユースケースからドメインユースケースを導くと分かりやすい。
!アプリケーションユースケースの例: https://speakerdeck.com/hidenorigoto/phpkanhuarensu2013-moderutofalsexiang-kihe-ifang-domeinqu-dong-she-ji-ti-yan-wakusiyotupu-suraido?slide=53
!
ドメインユースケースの例: https://speakerdeck.com/hidenorigoto/phpkanhuarensu2013-moderutofalsexiang-kihe-ifang-domeinqu-dong-she-ji-ti-yan-wakusiyotupu-suraido?slide=54
3. 概念モデルを描く- 解決ドメインモデルの中核を構成するドメインオブジェクト- ドメインオブジェクト間の関連を明らかにする- 基本のモデル型(第4章のビルディングブロック) - サービス - エンティティ!!ですが、ビルディングブロックを使わない記法でもモデル図は描けるので、ご自由に!
3. 概念モデルを描く例:DoorKeeperイベント申込サービスは、ログインユーザエンティティとイベントエンティティを関連付けて、参加申込エンティティとして記録する。
ではワークショップをはじめます
流れ- お題の要件の抜粋を紙で配るのでまずは読む。- ペアワークで、業務分析・ドメインモデリングを紙、ペン、付箋でする。 - イテレーション2回で。- 実装まではやりません。- 2組発表。
イテレーション1のお題「PHPカンファレンス2013 モデルとの向き合い方:ドメイン駆動設計体験ワークショップ」https://speakerdeck.com/hidenorigoto/phpkanhuarensu2013-moderutofalsexiang-kihe-ifang-domeinqu-dong-she-ji-ti-yan-wakusiyotupu-suraido?slide=37!!要件の抜粋を紙で配るのでまずは読んで下さい。
!書かれていないけれど必要な仕様があれば、適宜想定して下さい。
再掲:やり方(例)1. 業務分析(要求の収集):好きなやり方で2. ドメインモデリング:
(1)ドメイン辞書 (2) ユースケースモデル (3) 概念モデル !※決まりは無いので、できる人は好きなやり方でご自由にどうぞ!
★注意:NG例★・システムには目的があり、対象範囲、境界がある。モデリングもそう。!・ドメインの言葉として、下記のようなキーワードが出てくるのはNG☆
☓ インターネット? ☓ PC?
イテレーション2のお題「PHPカンファレンス2013 モデルとの向き合い方:ドメイン駆動設計体験ワークショップ」https://speakerdeck.com/hidenorigoto/phpkanhuarensu2013-moderutofalsexiang-kihe-ifang-domeinqu-dong-she-ji-ti-yan-wakusiyotupu-suraido?slide=37!!要件の抜粋を紙で配るので読んでモデリングをして下さい。
オプション課題早く終わってしまった方向け。!●アップグレードに「審査」を加える ・購入履歴やその他の条件によって審査する ・審査条件は、経営・管理層の意向により条件が変更される場合がある !●アップグレード数集計を加える ・アップグレード申込数の多い店舗を月別に表彰する ●山村書店アップグレードシステムの「ユビキタス言語」を作る ドメイン辞書を作っただけでは、まだユビキタス言語になっていません。(辞書(用語集)と言語は違う) http://phpmentors.jp/post/87045561213/practical-ddd-4 語と語を、その関係を表す言葉で結ぶような作業をやってみる。
引用、参考資料引用資料
[※1] PHPによるドメイン駆動設計入門 (後藤 秀宣、久保 敦啓)
(PHPメンターズトレーニングサービステキスト)
[※2] マインドマップではじめるモデリング講座(浅海智晴) p.8
[※3] 業務システムモデリング練習帳(渡辺幸三)
[ワークショップのお題]「PHPカンファレンス2013 モデルとの向き合い方:ドメイン駆動設計体験ワークショップ」https://speakerdeck.com/hidenorigoto/
phpkanhuarensu2013-moderutofalsexiang-kihe-ifang-domeinqu-dong-she-ji-ti-yan-wakusiyotupu-suraido?slide=46!
参考資料
ジェネレーティブプログラミングの世界 http://www.slideshare.net/iteman/ss-31235579 !
★Thanks★ PHPメンターズプログラミング道場の皆さま