© BIGLOBE Inc.
2019/12/14
DDDモデリングハンズオン
レガシーをぶっつぶせ。
現場でDDD!2nd
2 © BIGLOBE Inc.
本資料の説明
本ワークショップで使う、
ソースコードは以下に公開してあります
(masterブランチ)
テストが全て通るようになる事を目指して、
モデリング/コーディングしてみて下さい
https://github.com/biglobe-isp/workshopmobile
3 © BIGLOBE Inc.
本日、体験してもらいたい事
ドメインモデルと
ソースコード
の関係性を知る
4 © BIGLOBE Inc.
エヴァンス本 第1部
エヴァンスが言っている事とは?
第1部 ドメインモデルを機能させる
- 第1章 知識をかみ砕く
- 第2章 コミュニケーションと言語の使い方
- 第3章 モデルと実装を結びつける
エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践) https://www.amazon.co.jp/dp/4798121967
5 © BIGLOBE Inc.
コードを作成する人々がモデルに責
任を感じていない場合や、
アプリケーションのためにモデルを
機能させる方法を理解していない場
合、
そのモデルはソフトウェアと無関係
になってしまう。
実践的モデラ
6 © BIGLOBE Inc.
モデルとコードの両立
ドメインモデル
ソースコード
どっちも大事
7 © BIGLOBE Inc.
本日の目標
8 © BIGLOBE Inc.
本日の目標
モデルとコードを
往復して
ドメインを育てられる
ようになろう!
9 © BIGLOBE Inc.
本日の流れ
10 © BIGLOBE Inc.
本日の流れ
本日は
「格安SIMの料金計算システム」
の開発してもらいます。
ドメインモデルとソースコードは既にあります。
そこに仕様変更をお伝えしますので、
・ドメインモデルを変更する。
・ソースコードを変更する。
・テストが通るようになる。
・ドメインモデルとソースコードを比べる  本日のゴール
11 © BIGLOBE Inc.
本日の流れ
1. 導入 (20分)
2. 作業 (90分)
3. クロージング(10分)
12 © BIGLOBE Inc.
チームになろう
13 © BIGLOBE Inc.
お願いします
急激に
仲良くなって下さい
14 © BIGLOBE Inc.
自己紹介タイム
・1人1分
・名前と本日の意気込み
(日頃の役割、DDDについて、etc)
15 © BIGLOBE Inc.
サービス仕様の説明
16 © BIGLOBE Inc.
サービス仕様
プラン
格安SIM
1ギガ
料金:1000円
料金計算 1000円
17 © BIGLOBE Inc.
サービス仕様
プラン
格安SIM
1ギガ
料金:1000円
3ギガ
料金:2000円
30ギガ
料金:6000円
18 © BIGLOBE Inc.
サービス仕様
プラン
格安SIM
1ギガ
料金:1000円
3ギガ
料金:2000円
30ギガ
料金:6000円
エンタメフリーオプション
1200円
プランが3ギガ・30ギガの時に
購入可能(1ギガは購入不可)
19 © BIGLOBE Inc.
料金はいくら?
20 © BIGLOBE Inc.
作業を開始!
その前に・・・
21 © BIGLOBE Inc.
議論のこころえ
22 © BIGLOBE Inc.
議論のこころえ
1. ドメインモデルには正解はありません。
2. 一般論より、このサービスに特化したモ
デル、コードを目指しましょう。
3. きづいたこと、考えていること、分から
ないこと、は声に出してみましょう。
発言をする事はチームにとって尊いこと
です。
4. 安心して作業して下さい。
最後はドライバーがどうにかします。
23 © BIGLOBE Inc.
喧嘩しないためのコーディング規約
• 継承禁止(移譲を使う)
• ドメイン層でプリミティブ型禁止(ラップする)
(String、int、Integer、long、Long、etc)
• ドメイン層でnull禁止
• クラス名は日本語 (時間ないから)
言語:Java (8)
フレームワーク:Spring Boot, Lombok
※細かいことはドライバーがどうにかして
24 © BIGLOBE Inc.
現状の把握
25 © BIGLOBE Inc.
仕様書を読もう
テーブルにある
「格安SIM仕様書」
を読み合わせましょう
(3分)
26 © BIGLOBE Inc.
モデルの確認
プラン
格安SIM
1ギガ
料金:1000円
料金計算 1000円
テーブル上のモデルを
見てみましょう
(3分)
27 © BIGLOBE Inc.
ソースコードの確認
ソースコードを
見てみよう
(ReadMeも合わせて)
(3分)
28 © BIGLOBE Inc.
さっそく
作業を開始しましょう
※各テーブルの作業へ
29 © BIGLOBE Inc.
モデリングの心得
30 © BIGLOBE Inc.
名詞・動詞を探してドメインモデルへ反映
名詞=ドメイン名やドメインの属性値の候補
動詞=ドメインのメソッドの候補
引数:処理に必要なドメインを渡す
戻り値:結果のドメインが戻ってくる
※戻り値なし(void)にはならない
メソッドの考え方
31 © BIGLOBE Inc.
仕様書に書かれていないドメインを探そう
・特定のユースケース(処理)を考えみよう
・チームメンバの発言・語彙に注意しよう
例)
・料金を「〜料金」と言ってたりしないか?
・〜と〜は、のように何度も同じ組み合わせを
主語としていないか?
サービス仕様(ドメイン)の理解が深まると、
新しい概念(ドメイン)が見えてくる
32 © BIGLOBE Inc.
ドメインモデルの関係性を考えてみる
例)
A -> Bの場合、
・AはBを知っている。
・AはBを持っている or AはBを利用する
・BはAを知らない。
・BはAを持っていない and BはAを利用しない
依存関係の線をドメインモデルに書こう
33 © BIGLOBE Inc.
コーディングの心得
34 © BIGLOBE Inc.
こころえ
・可能な限りドライバーに指示してあげて下さい。
例) ~を追加して。~を~に変更して。など
・間違い、構文エラーを恐れない。
違っていたら、IDEとコンパイラとドライバーが
教えてくれます。
・ドメインモデルをコードにする事が目標です。
頭の中にある処理をコードしたい訳ではない事
を心がけて下さい。
35 © BIGLOBE Inc.
ドメインを作ろう
・クラス(ドメイン)を作ってみよう
- ドメインモデルの通りに作る
・クラスが出来たらメソッドを追加して
みよう
・プリミティブ型が残るのはモデルが足
りてない証拠
36 © BIGLOBE Inc.
テストを動かしてみよう
37 © BIGLOBE Inc.
成功しました?
38 © BIGLOBE Inc.
ドメインの深い考察を求めて
39 © BIGLOBE Inc.
ドメインモデルとソースコードを比べてみよう
ドメインモデルに存在しないクラスがない?
ドメインモデルには存在しない依存関係がないか?
モデル⇒コードへ落として
分かった事を議論してみる
40 © BIGLOBE Inc.
ドメインモデルをゆさぶってみる
今後、このサービスで起きそうな仕様変
更を想像してみる
⇒影響が大きい場合、小さくする方法を議
論してみましょう
違う方式のモデルを考えてみよう。
なぜ、今のモデルの方が優れているのか
説明してみましょう。
41 © BIGLOBE Inc.
ゴール!!
42 © BIGLOBE Inc.
クロージング
43 © BIGLOBE Inc.
本日の目標
モデルとコードを
往復して
ドメインを育てられる
ようになろう!
44 © BIGLOBE Inc.
モデルとコードの往復
〇メリット
全体が見えやすいため共有・議論の土台になる
〇デメリット
あいまいさが許容される。間違いが分かりにくい
ドメインモデル(=抽象的)
ソースコード(=具体的)
〇メリット
あいまいさや間違いに気づきやすい
〇デメリット
全体は見えにくいため議論が局所的になりやすい
45 © BIGLOBE Inc.
今日、体験してほしかったこと
抽象と具象を往復す
る事で、ドメインへの
理解が深まる
46 © BIGLOBE Inc.
最後に
47 © BIGLOBE Inc.
本日のワークショップの
続きをしたい方へ朗報
48 © BIGLOBE Inc.
BIGLOBEではエンジニアを募集中です
https://hrmos.co/pages/biglobe/jobs?category=1265875468451753984
49 © BIGLOBE Inc.
モデリングがもっと
上手になりたい人に朗報
50 © BIGLOBE Inc.
モデリングのための本を販売中です。
モデリングが上達していく
過程をまとめた1冊です。
上達のために社内で
「モデリング勉強会」
を立ち上げて、
そこで得られた2年分のノウハウをわ
ずか40ページに圧縮しました。
モデリングに悩んだ人にぜひ読んで
もらいたい!!
技術書典6でも出版
内容
1冊500円
51 © BIGLOBE Inc.
オウンドメディア始めました
52 © BIGLOBE Inc.
ビッグローブで働く社員の様々な一面を紹介
内容
TechBlogもあります
https://style.biglobe.co.jp
© BIGLOBE Inc.

DDDモデリングハンズオン - レガシーをぶっつぶせ。現場でDDD!2nd

  • 1.
  • 2.
    2 © BIGLOBEInc. 本資料の説明 本ワークショップで使う、 ソースコードは以下に公開してあります (masterブランチ) テストが全て通るようになる事を目指して、 モデリング/コーディングしてみて下さい https://github.com/biglobe-isp/workshopmobile
  • 3.
    3 © BIGLOBEInc. 本日、体験してもらいたい事 ドメインモデルと ソースコード の関係性を知る
  • 4.
    4 © BIGLOBEInc. エヴァンス本 第1部 エヴァンスが言っている事とは? 第1部 ドメインモデルを機能させる - 第1章 知識をかみ砕く - 第2章 コミュニケーションと言語の使い方 - 第3章 モデルと実装を結びつける エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践) https://www.amazon.co.jp/dp/4798121967
  • 5.
    5 © BIGLOBEInc. コードを作成する人々がモデルに責 任を感じていない場合や、 アプリケーションのためにモデルを 機能させる方法を理解していない場 合、 そのモデルはソフトウェアと無関係 になってしまう。 実践的モデラ
  • 6.
    6 © BIGLOBEInc. モデルとコードの両立 ドメインモデル ソースコード どっちも大事
  • 7.
    7 © BIGLOBEInc. 本日の目標
  • 8.
    8 © BIGLOBEInc. 本日の目標 モデルとコードを 往復して ドメインを育てられる ようになろう!
  • 9.
    9 © BIGLOBEInc. 本日の流れ
  • 10.
    10 © BIGLOBEInc. 本日の流れ 本日は 「格安SIMの料金計算システム」 の開発してもらいます。 ドメインモデルとソースコードは既にあります。 そこに仕様変更をお伝えしますので、 ・ドメインモデルを変更する。 ・ソースコードを変更する。 ・テストが通るようになる。 ・ドメインモデルとソースコードを比べる  本日のゴール
  • 11.
    11 © BIGLOBEInc. 本日の流れ 1. 導入 (20分) 2. 作業 (90分) 3. クロージング(10分)
  • 12.
    12 © BIGLOBEInc. チームになろう
  • 13.
    13 © BIGLOBEInc. お願いします 急激に 仲良くなって下さい
  • 14.
    14 © BIGLOBEInc. 自己紹介タイム ・1人1分 ・名前と本日の意気込み (日頃の役割、DDDについて、etc)
  • 15.
    15 © BIGLOBEInc. サービス仕様の説明
  • 16.
    16 © BIGLOBEInc. サービス仕様 プラン 格安SIM 1ギガ 料金:1000円 料金計算 1000円
  • 17.
    17 © BIGLOBEInc. サービス仕様 プラン 格安SIM 1ギガ 料金:1000円 3ギガ 料金:2000円 30ギガ 料金:6000円
  • 18.
    18 © BIGLOBEInc. サービス仕様 プラン 格安SIM 1ギガ 料金:1000円 3ギガ 料金:2000円 30ギガ 料金:6000円 エンタメフリーオプション 1200円 プランが3ギガ・30ギガの時に 購入可能(1ギガは購入不可)
  • 19.
    19 © BIGLOBEInc. 料金はいくら?
  • 20.
    20 © BIGLOBEInc. 作業を開始! その前に・・・
  • 21.
    21 © BIGLOBEInc. 議論のこころえ
  • 22.
    22 © BIGLOBEInc. 議論のこころえ 1. ドメインモデルには正解はありません。 2. 一般論より、このサービスに特化したモ デル、コードを目指しましょう。 3. きづいたこと、考えていること、分から ないこと、は声に出してみましょう。 発言をする事はチームにとって尊いこと です。 4. 安心して作業して下さい。 最後はドライバーがどうにかします。
  • 23.
    23 © BIGLOBEInc. 喧嘩しないためのコーディング規約 • 継承禁止(移譲を使う) • ドメイン層でプリミティブ型禁止(ラップする) (String、int、Integer、long、Long、etc) • ドメイン層でnull禁止 • クラス名は日本語 (時間ないから) 言語:Java (8) フレームワーク:Spring Boot, Lombok ※細かいことはドライバーがどうにかして
  • 24.
    24 © BIGLOBEInc. 現状の把握
  • 25.
    25 © BIGLOBEInc. 仕様書を読もう テーブルにある 「格安SIM仕様書」 を読み合わせましょう (3分)
  • 26.
    26 © BIGLOBEInc. モデルの確認 プラン 格安SIM 1ギガ 料金:1000円 料金計算 1000円 テーブル上のモデルを 見てみましょう (3分)
  • 27.
    27 © BIGLOBEInc. ソースコードの確認 ソースコードを 見てみよう (ReadMeも合わせて) (3分)
  • 28.
    28 © BIGLOBEInc. さっそく 作業を開始しましょう ※各テーブルの作業へ
  • 29.
    29 © BIGLOBEInc. モデリングの心得
  • 30.
    30 © BIGLOBEInc. 名詞・動詞を探してドメインモデルへ反映 名詞=ドメイン名やドメインの属性値の候補 動詞=ドメインのメソッドの候補 引数:処理に必要なドメインを渡す 戻り値:結果のドメインが戻ってくる ※戻り値なし(void)にはならない メソッドの考え方
  • 31.
    31 © BIGLOBEInc. 仕様書に書かれていないドメインを探そう ・特定のユースケース(処理)を考えみよう ・チームメンバの発言・語彙に注意しよう 例) ・料金を「〜料金」と言ってたりしないか? ・〜と〜は、のように何度も同じ組み合わせを 主語としていないか? サービス仕様(ドメイン)の理解が深まると、 新しい概念(ドメイン)が見えてくる
  • 32.
    32 © BIGLOBEInc. ドメインモデルの関係性を考えてみる 例) A -> Bの場合、 ・AはBを知っている。 ・AはBを持っている or AはBを利用する ・BはAを知らない。 ・BはAを持っていない and BはAを利用しない 依存関係の線をドメインモデルに書こう
  • 33.
    33 © BIGLOBEInc. コーディングの心得
  • 34.
    34 © BIGLOBEInc. こころえ ・可能な限りドライバーに指示してあげて下さい。 例) ~を追加して。~を~に変更して。など ・間違い、構文エラーを恐れない。 違っていたら、IDEとコンパイラとドライバーが 教えてくれます。 ・ドメインモデルをコードにする事が目標です。 頭の中にある処理をコードしたい訳ではない事 を心がけて下さい。
  • 35.
    35 © BIGLOBEInc. ドメインを作ろう ・クラス(ドメイン)を作ってみよう - ドメインモデルの通りに作る ・クラスが出来たらメソッドを追加して みよう ・プリミティブ型が残るのはモデルが足 りてない証拠
  • 36.
    36 © BIGLOBEInc. テストを動かしてみよう
  • 37.
    37 © BIGLOBEInc. 成功しました?
  • 38.
    38 © BIGLOBEInc. ドメインの深い考察を求めて
  • 39.
    39 © BIGLOBEInc. ドメインモデルとソースコードを比べてみよう ドメインモデルに存在しないクラスがない? ドメインモデルには存在しない依存関係がないか? モデル⇒コードへ落として 分かった事を議論してみる
  • 40.
    40 © BIGLOBEInc. ドメインモデルをゆさぶってみる 今後、このサービスで起きそうな仕様変 更を想像してみる ⇒影響が大きい場合、小さくする方法を議 論してみましょう 違う方式のモデルを考えてみよう。 なぜ、今のモデルの方が優れているのか 説明してみましょう。
  • 41.
    41 © BIGLOBEInc. ゴール!!
  • 42.
    42 © BIGLOBEInc. クロージング
  • 43.
    43 © BIGLOBEInc. 本日の目標 モデルとコードを 往復して ドメインを育てられる ようになろう!
  • 44.
    44 © BIGLOBEInc. モデルとコードの往復 〇メリット 全体が見えやすいため共有・議論の土台になる 〇デメリット あいまいさが許容される。間違いが分かりにくい ドメインモデル(=抽象的) ソースコード(=具体的) 〇メリット あいまいさや間違いに気づきやすい 〇デメリット 全体は見えにくいため議論が局所的になりやすい
  • 45.
    45 © BIGLOBEInc. 今日、体験してほしかったこと 抽象と具象を往復す る事で、ドメインへの 理解が深まる
  • 46.
    46 © BIGLOBEInc. 最後に
  • 47.
    47 © BIGLOBEInc. 本日のワークショップの 続きをしたい方へ朗報
  • 48.
    48 © BIGLOBEInc. BIGLOBEではエンジニアを募集中です https://hrmos.co/pages/biglobe/jobs?category=1265875468451753984
  • 49.
    49 © BIGLOBEInc. モデリングがもっと 上手になりたい人に朗報
  • 50.
    50 © BIGLOBEInc. モデリングのための本を販売中です。 モデリングが上達していく 過程をまとめた1冊です。 上達のために社内で 「モデリング勉強会」 を立ち上げて、 そこで得られた2年分のノウハウをわ ずか40ページに圧縮しました。 モデリングに悩んだ人にぜひ読んで もらいたい!! 技術書典6でも出版 内容 1冊500円
  • 51.
    51 © BIGLOBEInc. オウンドメディア始めました
  • 52.
    52 © BIGLOBEInc. ビッグローブで働く社員の様々な一面を紹介 内容 TechBlogもあります https://style.biglobe.co.jp
  • 53.