modeling workshop
Post on 05-Jul-2015
539 views
DESCRIPTION
http://www.wankuma.com/seminar/20130202nagoya26/TRANSCRIPT
わんくま同盟 名古屋勉強会 #26
モデリング・ワークショップ
2013/02/02
You&I
わんくま同盟 名古屋勉強会 #26
ダレ、イッタイ。
• H/N You&I(読み:ユーアンドアイ)
• 出身 生まれも育ちも名古屋市
• 年齢 30代中盤
• 本職 商学部出身の職業プログラマ
• 言語 C++,C#,VB6,日本語COBOL
• 日記 http://d.hatena.ne.jp/youandi/
• 所属 名古屋アジャイル勉強会
プログラミング生放送 名古屋支部
わんくま同盟
わんくま同盟 名古屋勉強会 #26
AGENDA
1. モデリング・ワークショップ概要説明
2. モデリングの勘所解説 by furuyoshiさん
3. グループ分け&自己紹介
4. モデリングワークショップ1(モデリング)
5. モデリングワークショップ2(モデリング)
6. モデリングワークショップ3(実装)
7. まとめ
わんくま同盟 名古屋勉強会 #26
始める前に
ドメイン駆動設計の考え方は
とても難しいです><
みんなで一緒にやれば怖くない!
分からない事はどんどん質問しましょう。
わんくま同盟 名古屋勉強会 #26
AGENDA
1. モデリング・ワークショップ概要説明
2. モデリングの勘所解説 by furuyoshiさん
3. グループ分け&自己紹介
4. モデリングワークショップ1(モデリング)
5. モデリングワークショップ2(モデリング)
6. モデリングワークショップ3(実装)
7. まとめ
わんくま同盟 名古屋勉強会 #26
1.モデリング・ワークショップ概要説明 (1/9)
• まず質問ですが、ソフトウェア開発を行っている方で、設計を行った事がある方はいらっしゃいますか?
わんくま同盟 名古屋勉強会 #26
1.モデリング・ワークショップ概要説明 (2/9)
• 続いて質問ですが、書籍「エリック・エヴァンスのドメイン駆動設計」を読んだ事はありますか?
– http://www.seshop.com/product/detail/13087/
わんくま同盟 名古屋勉強会 #26
1.モデリング・ワークショップ概要説明 (3/9)
• まずはドメインって? (DDD本P.2)
–すべてのソフトウェアプログラムは、それを利用する事ユーザーの何らかの活動や関心と関係がある。
–ユーザーがプログラムを適用するこの対象領域が、ソフトウェアのドメインである。
わんくま同盟 名古屋勉強会 #26
1.モデリング・ワークショップ概要説明 (4/9)
• モデルについて (DDD本P.2)
–開発者はそのユーザーの活動に関係する体系化された知識を身につけなければならない。
–ここで要求される知識の幅広さ、情報の量と複雑さに圧倒されるかもしれない。モデルはこの重荷と格闘する為のツール。
–モデルとは選び抜かれてシンプルにされ、意図的に組み立てられた知識の表現形式。
わんくま同盟 名古屋勉強会 #26
1.モデリング・ワークショップ概要説明 (5/9)
• ドメインモデルとは? (DDD本P.3)
–ドメインモデルとは特定の図ではなく、図が伝えようとしている考え方である。
–ドメインエキスパートの頭の中にある単なる知識ではなく、その知識が厳密に構成され、選び抜かれて抽象化されたものである。
–ドメインモデルは、モデルを「写実的に」作成する事ではない。映画制作のように、ある目的に従って、現実の概要を表現している。
わんくま同盟 名古屋勉強会 #26
1.モデリング・ワークショップ概要説明 (6/9)
• DDDにおけるモデルの有用性 (DDD本P.3)
1. モデルと設計の核心が相互に形成しあう。
モデルの理解に基づいてコードを理解できるようになる
2. モデルはチームメンバ全員が使用する言語の基盤である。
開発者とドメインエキスパートが通訳なしにコミュニケーションできる。このコミュニケーション言語はユビキタス言語と呼ばれる。イメージとしては市場の競りで使われている掛け声。
3. モデルとは蒸留された知識である。
上記2つの事が相互作用してモデリングプロセスにフィードバックされていく。
わんくま同盟 名古屋勉強会 #26
1.モデリング・ワークショップ概要説明 (7/9)
• 書籍「エリック・エヴァンスのドメイン駆動設計」で学べる事 (1/2)
1. チームメンバー全員に同じ言語で会話をさせる
2. モデルと実装をより深く結びつける
3. ポイントとなる特徴を、モデルにおいてはっきりさせる
4. ドメインオブジェクトのライフサイクルを管理する
5. 安全に結合できるドメインコードを入念に作成する
6. 複雑なコードを明白で予測できるものにする
7. ドメインビジョン声明文を記述する
8. 複雑なドメインのコアを蒸留する
わんくま同盟 名古屋勉強会 #26
1.モデリング・ワークショップ概要説明 (8/9)
• 書籍「エリック・エヴァンスのドメイン駆動設計」で学べる事 (2/2)
9. モデルに必要な、暗黙的な概念を掘り出す
10.アナリシスパターンを適用する
11.デザインパターンをモデルに関係づける
12.巨大なシステムでモデルの整合性を維持する
13.同じプロジェクトで複数のモデルが共存できるようにする
14.大規模な構造によりシステムを構成する
15.モデリングのブレイクスルーを認識してそれに対応する
わんくま同盟 名古屋勉強会 #26
1.モデリング・ワークショップ概要説明 (9/9)
• 以上の事柄を、書籍「エリック・エヴァンスのドメイン駆動設計」を読んで理解する事は容易ではありません。
• そこで読書会として集まり、自分の疑問点について質問したり、他人の質問について自分の考えを伝えたりしています。
• 本日のワークショップにおいても、グループ内でユビキタス言語でコミュニケーションを取りながらモデリングを行っていく事を体験して頂きます。
わんくま同盟 名古屋勉強会 #26
AGENDA
1. モデリング・ワークショップ概要説明
2. モデリングの勘所解説 by furuyoshiさん
3. グループ分け&自己紹介
4. モデリングワークショップ1(モデリング)
5. モデリングワークショップ2(モデリング)
6. モデリングワークショップ3(実装)
7. まとめ
わんくま同盟 名古屋勉強会 #26
2. モデリングの勘所解説
• それではお題を出して、いきなりモデリング開始!
• ってのは辛いと思いますので、モデリングのエキスパートの方から、モデリングの勘所だったり、どのような視点や考え方でモデリングを進めるべきか、解説を行って頂きます。
• furuyoshiさんの資料
– http://www.slideshare.net/furuyoshi/uml-16303062
わんくま同盟 名古屋勉強会 #26
AGENDA
1. モデリング・ワークショップ概要説明
2. モデリングの勘所解説 by furuyoshiさん
3. グループ分け&自己紹介
4. モデリングワークショップ1(モデリング)
5. モデリングワークショップ2(モデリング)
6. モデリングワークショップ3(実装)
7. まとめ
わんくま同盟 名古屋勉強会 #26
3. グループ分け&自己紹介
• 3つのグループに分かれてモデリングを行っていきたいと思います。
• 今回は開発言語毎にグループを分けたいと思います。(DDD本読書会参加メンバーは除く)
–C++/C言語
–C#/VB.NET
– Java/Scala/Groovy
–Ruby/Python
–その他
わんくま同盟 名古屋勉強会 #26
3. グループ分け&自己紹介
• 各グループにて、以下の内容で自己紹介を行って下さい。
–お名前
–今日のお昼ご飯のメニュー
–普段UML等を使ってモデリングを行っているか
わんくま同盟 名古屋勉強会 #26
AGENDA
1. モデリング・ワークショップ概要説明
2. モデリングの勘所解説 by furuyoshiさん
3. グループ分け&自己紹介
4. モデリングワークショップ1(モデリング)
5. モデリングワークショップ2(モデリング)
6. モデリングワークショップ3(実装)
7. まとめ
わんくま同盟 名古屋勉強会 #26
4.モデリングワークショップ1 (1/6)
• では早速モデリングしてみましょう。
• というのは難しいと思うので、もう少し補足説明。
• まずモデリングを行う上でどのような要素に分解していけば良いのか?
わんくま同盟 名古屋勉強会 #26
4.モデリングワークショップ1 (2/6)
• ドメインモデルを構成する要素 (DDD本P.79)
1. エンティティ(別名:参照オブジェクト)
ドメインモデリングする際の最小構成要素。UMLで言う所のクラスオブジェクトのイメージ。
2. 値オブジェクト
不変なオブジェクト。
3. サービス
宅配料金を計算する/商品IDを採番する。といったように、状態を持たず、振る舞いのみを定義する。
4. モジュール(別名:パッケージ)
低結合・高凝縮な概念の集合。
わんくま同盟 名古屋勉強会 #26
4.モデリングワークショップ1 (3/6)
• ドメインオブジェクトのライフサイクル (DDD本P.121)
1. 集約
明確な所有権と境界を定義する。
複数のエンティティ・値オブジェクトの集まりを一塊として表現する考え方。OOPでのカプセル化のイメージ。
2. ファクトリー
デザインパターンのファクトリーパターン。エンティティを生成する。
3. リポジトリ
データベース。オブジェクトを格納したり、再構成(=元のオブジェクトを取り出す) したりしてデータを永続化する。
わんくま同盟 名古屋勉強会 #26
4.モデリングワークショップ1 (4/6)
わんくま同盟 名古屋勉強会 #26
4.モデリングワークショップ1 (5/6)
• では早速モデリングしてみましょう。
• お題は・・・
回転寿司 • 回転寿司のシステムについて、まずはグループ単位ではなく、各自が思うようにモデリングしてみて下さい。
時間:10分間
わんくま同盟 名古屋勉強会 #26
4.モデリングワークショップ1 (6/6)
• モデリングしてみていかがでしたでしょうか?
• グループ内でモデリング結果について共有しましょう。
–どんなモデルを書いたか
–書いたモデルにはどんな売り・特徴があるか?ビジネス的価値はあるか?
• ずっと寿司が回ったままになっていないか?ちゃんとガベコレされるか?
–実現可能か?
時間:10分間
わんくま同盟 名古屋勉強会 #26
AGENDA
1. モデリング・ワークショップ概要説明
2. モデリングの勘所解説 by furuyoshiさん
3. グループ分け&自己紹介
4. モデリングワークショップ1(モデリング)
5. モデリングワークショップ2(モデリング)
6. モデリングワークショップ3(実装)
7. まとめ
わんくま同盟 名古屋勉強会 #26
4.モデリングワークショップ2 (1/2)
• 今度はグループでモデリングしてみましょう。
• お題は・・・同じく・・・
回転寿司 • 誰かのものをベースにしても良いですし、また1から考え直してみるのも良いです。
• まずはユースケースから考えてみましょう。
時間:30分間
わんくま同盟 名古屋勉強会 #26
4.モデリングワークショップ2 (2/2)
• モデリングしてみていかがでしたでしょうか?
• 各グループで発表者を決めて下さい。
• グループ間でモデリング結果について共有しましょう。
–どんなモデルを書いたか
–書いたモデルにはどんな売り・特徴があるか?ビジネス的価値はあるか?
–実現可能か?
時間:10分間
わんくま同盟 名古屋勉強会 #26
AGENDA
1. モデリング・ワークショップ概要説明
2. モデリングの勘所解説 by furuyoshiさん
3. グループ分け&自己紹介
4. モデリングワークショップ1(モデリング)
5. モデリングワークショップ2(モデリング)
6. モデリングワークショップ3(実装)
7. まとめ
わんくま同盟 名古屋勉強会 #26
6. モデリングワークショップ3 (1/3)
• これまで回転寿司のモデリングを行ってきましたが、実際に実装できそうな感じになるまで蒸留できてきましたよね?実装してみたくなってきましたよね?
• という事でグループ内で2人一組または3人一組のペアを作り、ドメインモデリングしたものを元に実装してみましょう。
わんくま同盟 名古屋勉強会 #26
6. モデリングワークショップ3 (2/3)
• ペアで作業を進める前に、各グループ内で用語の表記を揃えましょう。皿→dish等主要なドメインモデルの名前を共通化しましょう。
• ペアの開発に関するユビキタス言語がプログラミング言語ではなく日本語の場合は、ペアローテションなしでドライバー/ナビゲーター固定で進めましょう。
時間:30分間
わんくま同盟 名古屋勉強会 #26
6. モデリングワークショップ3 (3/3)
• モデリング結果について共有しましょう。
• ペア毎に発表をお願いします。
–使用言語
–実装したシステムの売りは?ビジネス的価値は?
–テストコードはあるか?
• テストがない場合はお仕置きがあるかも?
時間:20分間
わんくま同盟 名古屋勉強会 #26
AGENDA
1. モデリング・ワークショップ概要説明
2. モデリングの勘所解説 by furuyoshiさん
3. グループ分け&自己紹介
4. モデリングワークショップ1(モデリング)
5. モデリングワークショップ2(モデリング)
6. モデリングワークショップ3(実装)
7. まとめ
わんくま同盟 名古屋勉強会 #26
7. まとめ (1/2)
• 皆さんお疲れ様でした。
• モデリング体験いかがでしたでしょうか?
• 今日の体験を是非、現場でも活かして頂ければと思います。
• 最後にワークショップのふりかえりとしてKPT(ケプト)を行います。KPTとはKeep/Problem/Tryの3つのドメインで自分のやった事や考えた事を整理するプラクティスです。
わんくま同盟 名古屋勉強会 #26
7. まとめ (2/2)
• 各テーブルにKPTの用紙を用意します。
• 付箋紙1枚に付き1つの意見をペンで書き込んで下さい。
• K→P→Tの順に書いていくと良いです。
–Keepには、継続したい事、良かった事・楽しかった事、理解できた事など。
– Problemには、問題点・疑問点、分からなかった事や、できなかった事など。
–Tryには、今後チャレンジしたい事、こうしたら良い等の改善ご意見など。