90
DDD/Scrumワークショップ モデリングと実装のうずまきをまわそう 原田騎郎 株式会社アトラクタ 1 UMTPセミナー 2017/2/13

DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

DDD/Scrumワークショップモデリングと実装のうずまきをまわそう

原田騎郎 株式会社アトラクタ

1

UMTPセミナー 2017/2/13

Page 2: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

原田 騎郎Kiro HARADA

アジャイルコーチ ドメインモデラー SCMコンサルタント

Twitter: @haradakiro

認定スクラムプロフェッショナル 株式会社アトラクタ 代表取締役

2

Page 3: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

時間割(いまのところの見積)時間 内容14:05 ~ 14:45 ぐるぐる Scrum/DDD って何?14:50 ~ 15:50 ワークショップ1周目 15:40 ~ 15:50   1周目ふりかえり15:50 ~ 16:50 ワークショップ2周目 16:35 ~ 16:50   2周目ふりかえり16:50 ~ 17:00 講評/Scrum/DDDのこれから/ Q&A

3

Page 4: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

アジェンダ

DDD って何? Scrumって何?

DDD と Scrum の似ているところ?

両方のフィードバックサイクル

4

Page 5: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

アジェンダ

で、どうやるの ▪プロダクトバックログとモデリング ▪スプリントプランニングとモデリング ▪バックログリファインメントとモデリング

▪コードレビューとモデリング ▪モデルのリファクタリング

5

Page 6: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

アジェンダ

モデルをテストする ▪シナリオで確かめる ▪コードで確かめる。 ▪ ドメインモデルを TDD する

6

Page 7: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

DDD実践してますか?

7

Page 8: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

DDDをやらない理由?

難しいから、もうちょっと勉強してから

小さいシステムにはいらないでしょ

やったほうがよさそうだと思っているんだけれど。

8

Page 9: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

実践書も出た

9

Page 10: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

Scrumやれてますか?

10

Page 11: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

Scrumをやらない理由

「どうせ、Scrum はやるもんじゃない!」って言うでしょ。

やってみたら問題ばっかりでてくるし。

「いきあたりばったりやっているだけじゃないの?」と突っ込まれるし。

11

Page 12: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

どうやったらDDD & Scrumをうまくやれる?

使える?12

Page 13: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

群盲撫象之図

13

Page 14: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

群盲撫象之図

14

Page 15: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

ドメイン駆動設計(DDD)とは

ソフトウェアプロジェクトで、まず注意を払うべきなのは、ドメインとドメインロジックである。

複雑なドメインの設計はモデルに基づくべきである。

15

Page 16: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

ドメイン駆動設計(DDD)はどうやる?

コアドメインに集中する

ドメインの実務家とソフトウェアの実務家による創造的な共同作業によって、モデルと探求する

明確に境界づけられたコンテキストの中で、ユビキタス言語により会話する

16

Page 17: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

モデル探索のうずまき

モデルを新しいシナリオで揺さぶる

シナリオ

モデルモデルを提示状態ウォークスルー解決策ウォークスルー言語の探求間違う

ストーリーを語る肉付けする難しいところに再フォーカスコアドメインに再フォーカス

コードによる探査シナリオを“テスト”としてコードする厳密さを加える言語を洗練する解決策を探求間違う

収穫&文書化 参照シナリオ まともなモデルの一部 ほとんどのアイデアは書かない

17

Page 18: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

18

ストーリーを語る肉付けする難しいところに再フォーカスコアドメインに再フォーカス

収穫&文書化 参照シナリオ まともなモデルの一部 ほとんどのアイデアは書かない

シナリオを“テスト”としてコードする言語を洗練する厳密さを加える安価なプロトタイプシナリオをスクリプトにするやってみて、間違ったらコードを捨てる

モデルを提示状態ウォークスルー言語の探求厳密さを加える間違う

モデル探索のうずまき

Page 19: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

いつでも複数のモデルがある

正しいモデルを探求する▪そもそも「唯一正しい」モデルなどない

より有用なモデルを探し続ける

19

Page 20: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

地球のモデル?

Page 21: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家
Page 22: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家
Page 23: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家
Page 24: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家
Page 25: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家
Page 26: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

Scrum の概要

複雑で変化の激しい問題に対応するためのフレームワークであり、可能な限り価値の高いプロダクトを生産的かつ創造的に届けるためのものである。

▪ 軽量▪ 理解が容易▪ 習得は困難

26

Page 27: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

Scrum の概要

アジャイルなソフトウェア開発手法

そもそも、やり方(Methodology)ではない。やりかたの枠組み(Framework)にすぎない。

実際のやり方は、Scrumは指定しない。

よりよいやり方を探求し続ける27

Page 28: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

28

Page 29: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

29

Page 30: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

Scrum のフィードバックサイクル

プロダクトバックログスプリントバックログ

バックログリファインメント

スプリントレビューふりかえり

出荷可能な増分30

Page 31: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

クネビンフレームワーク

31http://cognitive-edge.com/

Page 32: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

Cynefin Framework

32By Snowded - Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=33783436

Page 33: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

簡単に見えても、、、

33

Page 34: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

複雑系で生き残る仕組み

境界

フィードバック

リズム

34

Page 35: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

Sprint Zero

プロダクトビジョン

ユーザーストーリー▪ユースケースシナリオ

モデル

▪モデルとシナリオのうずまきをまわす35

Page 36: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

プロダクトバックログ

ストーリーの順位付けをする

モデルを書いてみる▪ (モデルは常に複数ある)

▪モデルはストーリーを記述できるか?▪ モデルは役に立つか?

▪モデルをストーリーが十分説明できるか。▪ 足りていないストーリーはないか?

36

Page 37: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

実装して確かめる

難しいモデルは実装して確かめる▪ドメインモデルのみ▪ 永続化層 / UI はとりあえず考えなくてよい

▪ 複数のモデルを確かめる▪ 記述力▪ 実装のしやすさ▪ テストのしやすさ▪ 拡張のしやすさ

37

Page 38: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

スプリントより短い フィードバックサイクル

「検査と適応によって、間違っても、それから学べば良い」

けれど

わかる間違いには、気づきたい。2週間は短い。それ以上、短くするときつい。

38

Page 39: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

モデルをどこに書く

ホワイトボード▪関心ごとのある部分だけホワイトボードに

適宜清書してリポジトリに▪ astah* 使ってます

39

Page 40: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

コードレビュー

ドメイン以外にビジネスロジッックが埋もれていないか?

▪ドメインモデルに書いたテストを、そのまま使えるか?

▪実装しにくいところはどこか?▪ ドメインの使い方を間違えやすいところはどこか

40

Page 41: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

新たなバックログが来た

バックログを見積もる

▪モデルの変更が不要

▪モデルの拡張が必要

▪モデルの変更が必要

41

Page 42: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

複数のモデルを試す

スプリント期間を短くするだけでは成功は難しい。

単一のスプリント内で複数のオプションを試す。

モデルを利用した並行開発

42

Page 43: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

サイクルの中で拡張の方向が見える

パターン指向リファクタリング

次のバックログが見えないうちにリファクタリングするのはアンチパターン

▪リファクタリングのためのリファクタリングは悪

43

Page 44: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

モデルも必要に応じて拡張/変更

バックログが Ready になる前に実装モデルを拡張するな

▪概念モデル、仕様モデルをシナリオでテストしてから。

リファレンスモデル、パターンの適用を検討する

44

Page 45: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

モデルの汎用性と抽象度

富資産農業資産家畜牝牛ベッシー

45S.I.Hayakawa “Language in Thoughts and Action” 1939

Page 46: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

リファレンスモデルって

リファレンスモデルは抽象度が高く、再利用性が高い。▪時間をかけて確かめられている。

けれど

プロジェクトに役に立つかは、確かめないとわからない。

46

Page 47: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

小規模プロジェクトこそ DDD + Scrum を

小規模プロジェクトは、要件変更に弱い▪ 使えるリソース、期間が限られている

小規模プロジェクトの範囲を DDD によるモデルで定義する。▪ モデルの拡張範囲を合意する▪ モデルの変更をともなうバックログは混入しない

47

Page 48: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

パタンランゲージ

パターンランゲージとしての Scrum

パターンランゲージとしてのDomain Driven Design

48

Page 49: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

DDD Patterns

49

Page 50: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

Scrum Pattern Language

50

http://jeffsutherland.org/scrum/scrum_plop.pdf

Page 51: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

Organizational Patterns

51Coplien, James and Neil Harrison. Patterns of Agile Software Development. Addison-Wesley, ©2004.

Page 52: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

Scrum と DDDありがちなハマりどころ 対応策モデリング地獄(DDD)• モデルを作ることを目標にしてしまう

• いつまでたってもモデルが完成しない

スプリント(Scrum)• 出荷可能な製品を2週間ごとに!• モデリングも含めて使えるフィーチャーを2週間で作らなければならない。

全体を見ないで開発(Scrum)• システムの全体像を考えない• 全体計画を立てない

ユビキタス言語(DDD)• みなが使える共通言語をつくる• 共通言語による全体理解を促進• 全体計画のガイドとしてのモデル

52

Page 53: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

まとめ

DDDとScrumは、うまく組合せられる▪ DDDもScrumも変える必要がない▪お互いのメリットをうまく使える

短いサイクルを軽量にまわすのが大事

まずは、小さく始めてみましょう。

53

Page 54: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

ぐるぐる実践編

5人程度のグループを作ってください

グループ作業がしやすい用に、机、椅子は適宜並べ替えてください。

45分後に、簡単に成果の発表をしていただきます。

54

Page 55: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

今回のお題は?

駐車場55

Page 56: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

駐車場?

56

Page 57: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

57

Page 58: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

58

Page 59: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

59

Page 60: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

60

Page 61: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

61

Page 62: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

62

Page 63: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

63

Page 64: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

64

Page 65: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

駐車場の種類:

空き地月極め駐車場時間貸しコインパーキング店舗に付属店舗と提携

65

Page 66: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

今回作るシステムは、

無人有料駐車場(時間貸し)の管理システム

66

Page 67: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

どんな機能が必要?

シナリオを書いてみる

基本シナリオ?派生シナリオ?

どう拡張される?

67

Page 68: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

どんなモデルになる?

シナリオを記述できるモデルを書いてみる

そのモデルに足りないシナリオはない?

68

Page 69: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

モデル探索のうずまき

モデルを新しいシナリオで揺さぶる

シナリオ

モデルモデルを提示状態ウォークスルー解決策ウォークスルー言語の探求間違う

ストーリーを語る肉付けする難しいところに再フォーカスコアドメインに再フォーカス

コードによる探査シナリオを“テスト”としてコードする厳密さを加える言語を洗練する解決策を探求間違う

収穫&文書化 参照シナリオ まともなモデルの一部 ほとんどのアイデアは書かない

69

Page 70: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

70

ストーリーを語る肉付けする難しいところに再フォーカスコアドメインに再フォーカス

収穫&文書化 参照シナリオ まともなモデルの一部 ほとんどのアイデアは書かない

シナリオを“テスト”としてコードする言語を洗練する厳密さを加える安価なプロトタイプシナリオをスクリプトにするやってみて、間違ったらコードを捨てる

モデルを提示状態ウォークスルー言語の探求厳密さを加える間違う

モデル探索のうずまき

Page 71: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

コアドメインを実装してみよう

永続化、UI はいらない

モデルがそのまま動けるかどうか?

71

Page 72: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

作ってほしいもの

プロダクトバックログ▪優先順位のついたシナリオのリスト

ドメインモデル▪ UML のクラス図など▪ドメインの理解を助けるものなら何でも

コアドメインのサンプル実装▪コアドメインの受入れテストがあるといいな

72

Page 73: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

イテレーション1開始

45分しかありません。

時間の使いかたを計画しましょう。

73

Page 74: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

イテレーション1発表

成果を説明してみましょう。

74

Page 75: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

イテレーション1ふりかえり

びっくりしたこと、気づいたこと

学んだこと

次にやってみること

75

Page 76: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

イテレーション2に向けて

76

Page 77: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

どんなシナリオがある?

週末料金?夜間料金?煩雑期と閑散期

店舗利用による無料範囲会員割引

誤入場をどうしよう?駐車券なくしちゃったら?

77

Page 78: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

どうシステムを分割する?

駐車場の種類が変わると、変える必要のある部分は?▪車止め式▪ゲート式▪出場時にナンバーを認識する?

78

Page 79: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

モデルを眺める

駐車料金が変わると、どこが変わる?

週末料金とかは?

車止め vs. 入退場ゲート

79

Page 80: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

80

Page 81: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

こんな駐車場もあるららぽーと甲子園駐車場

81http://www.lalaport-koshien.com/access/index.html#05

Page 82: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

コアドメインはどこ?

82

Page 83: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

コンテキストマップ?

83

Page 84: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

イテレーション2発表

成果を説明してみましょう。

84

Page 85: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

イテレーション2ふりかえり

びっくりしたこと、気づいたこと

学んだこと

次にやってみること

85

Page 86: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

全体ふりかえり

DDD / Scrum を実際の業務で使ってみるには?

▪グループディスカッション

86

Page 87: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

課題2

レンタサイクルの管理システム

87

Page 88: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

シナリオ

レンタサイクル一台だけ

故障状態の管理(パンクなど)

複数台(複数サイズ-大人用、子供用)

電動アシスト付き(充電状態の管理)

88

Page 89: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

サブシナリオ

延滞の扱い

予約の扱い

▪予約済みのレンタサイクルが故障したら

89

Page 90: DDD/Scrumワークショップ · ドメイン駆動設計(ddd)はどうやる? 䡧コアドメインに集中する 䡧ドメインの実務家とソフトウェアの実務家

さらにシナリオ

複数拠点▪拠点間の乗り捨て ▪ある拠点にレンタサイクルが集まってしまったら?

90