SlideShare a Scribd company logo
1 of 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.

More Related Content

What's hot

Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことBIGLOBE Inc.
 
JJUG CCC リクルートの Java に対する取り組み
JJUG CCC リクルートの Java に対する取り組みJJUG CCC リクルートの Java に対する取り組み
JJUG CCC リクルートの Java に対する取り組みRecruit Technologies
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説するTaishiYamada1
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方増田 亨
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with KarateTakanori Suzuki
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能Kohei Tokunaga
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門Takuya Kitamura
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMPYusuke Kagata
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計Tadayoshi Sato
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善増田 亨
 
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイントVPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイントTakuya Takaseki
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM LoggingYuji Kubota
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 

What's hot (20)

Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 
JJUG CCC リクルートの Java に対する取り組み
JJUG CCC リクルートの Java に対する取り組みJJUG CCC リクルートの Java に対する取り組み
JJUG CCC リクルートの Java に対する取り組み
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
 
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイントVPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 

Similar to 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
 

Similar to 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アプリをリリースしてみた
 

Recently uploaded

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 

Recently uploaded (12)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

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