SlideShare ist ein Scribd-Unternehmen logo
1 von 53
© 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.

Weitere ähnliche Inhalte

Was ist angesagt?

DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかKoichiro Matsuoka
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース増田 亨
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと増田 亨
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDDドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD増田 亨
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン増田 亨
 
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀増田 亨
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで増田 亨
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方増田 亨
 
ドメイン駆動設計 実践ガイド
ドメイン駆動設計 実践ガイドドメイン駆動設計 実践ガイド
ドメイン駆動設計 実践ガイド増田 亨
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し増田 亨
 
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう増田 亨
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計増田 亨
 
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかなぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかYusuke Suzuki
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門Takuya Kitamura
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント増田 亨
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8Koichiro Matsuoka
 

Was ist angesagt? (20)

DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDDドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
 
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
ドメイン駆動設計 実践ガイド
ドメイン駆動設計 実践ガイドドメイン駆動設計 実践ガイド
ドメイン駆動設計 実践ガイド
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかなぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのか
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
 

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

DDDモデリングハンズオン - レガシーをぶっつぶせ
DDDモデリングハンズオン - レガシーをぶっつぶせDDDモデリングハンズオン - レガシーをぶっつぶせ
DDDモデリングハンズオン - レガシーをぶっつぶせBIGLOBE Inc.
 
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう増田 亨
 
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係Kaz Aiso
 
20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発Mao Ohnishi
 
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019満徳 関
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座DIVE INTO CODE Corp.
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
IBM Log Analysis with LogDNAを評価した話
 IBM Log Analysis with LogDNAを評価した話 IBM Log Analysis with LogDNAを評価した話
IBM Log Analysis with LogDNAを評価した話Daisuke Hiraoka
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)Masayuki Kanou
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】増田 亨
 
福岡SoftLayer勉強会20151015
福岡SoftLayer勉強会20151015福岡SoftLayer勉強会20151015
福岡SoftLayer勉強会20151015Shinobu Yasuda
 
C#でiPhone開発とか
C#でiPhone開発とかC#でiPhone開発とか
C#でiPhone開発とかShin Ise
 
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」Kaz Aiso
 
【16-D-4】3分ではじめるスマホアプリのビジュアル開発
【16-D-4】3分ではじめるスマホアプリのビジュアル開発【16-D-4】3分ではじめるスマホアプリのビジュアル開発
【16-D-4】3分ではじめるスマホアプリのビジュアル開発hmimura_embarcadero
 
PhoneGapとハイブリッド開発
PhoneGapとハイブリッド開発PhoneGapとハイブリッド開発
PhoneGapとハイブリッド開発Andy Hall
 
「マルチデバイス対応アプリ開発の勘所」
「マルチデバイス対応アプリ開発の勘所」「マルチデバイス対応アプリ開発の勘所」
「マルチデバイス対応アプリ開発の勘所」Embarcadero Technologies
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
 
2017秋「クラウドファースト時代における基幹業務システム開発革新セミナー」 超高速開発を実現するIBMクラウドの最新情報ご紹介2017
2017秋「クラウドファースト時代における基幹業務システム開発革新セミナー」 超高速開発を実現するIBMクラウドの最新情報ご紹介20172017秋「クラウドファースト時代における基幹業務システム開発革新セミナー」 超高速開発を実現するIBMクラウドの最新情報ご紹介2017
2017秋「クラウドファースト時代における基幹業務システム開発革新セミナー」 超高速開発を実現するIBMクラウドの最新情報ご紹介2017Tsuyoshi Hirayama
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java増田 亨
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたYasuharu Seki
 

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

DDDモデリングハンズオン - レガシーをぶっつぶせ
DDDモデリングハンズオン - レガシーをぶっつぶせDDDモデリングハンズオン - レガシーをぶっつぶせ
DDDモデリングハンズオン - レガシーをぶっつぶせ
 
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
 
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
 
20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発
 
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
IBM Log Analysis with LogDNAを評価した話
 IBM Log Analysis with LogDNAを評価した話 IBM Log Analysis with LogDNAを評価した話
IBM Log Analysis with LogDNAを評価した話
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
 
福岡SoftLayer勉強会20151015
福岡SoftLayer勉強会20151015福岡SoftLayer勉強会20151015
福岡SoftLayer勉強会20151015
 
C#でiPhone開発とか
C#でiPhone開発とかC#でiPhone開発とか
C#でiPhone開発とか
 
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
 
【16-D-4】3分ではじめるスマホアプリのビジュアル開発
【16-D-4】3分ではじめるスマホアプリのビジュアル開発【16-D-4】3分ではじめるスマホアプリのビジュアル開発
【16-D-4】3分ではじめるスマホアプリのビジュアル開発
 
PhoneGapとハイブリッド開発
PhoneGapとハイブリッド開発PhoneGapとハイブリッド開発
PhoneGapとハイブリッド開発
 
「マルチデバイス対応アプリ開発の勘所」
「マルチデバイス対応アプリ開発の勘所」「マルチデバイス対応アプリ開発の勘所」
「マルチデバイス対応アプリ開発の勘所」
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
2017秋「クラウドファースト時代における基幹業務システム開発革新セミナー」 超高速開発を実現するIBMクラウドの最新情報ご紹介2017
2017秋「クラウドファースト時代における基幹業務システム開発革新セミナー」 超高速開発を実現するIBMクラウドの最新情報ご紹介20172017秋「クラウドファースト時代における基幹業務システム開発革新セミナー」 超高速開発を実現するIBMクラウドの最新情報ご紹介2017
2017秋「クラウドファースト時代における基幹業務システム開発革新セミナー」 超高速開発を実現するIBMクラウドの最新情報ご紹介2017
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみた
 

Kürzlich hochgeladen

IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 

Kürzlich hochgeladen (8)

IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 

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

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