Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
BIGLOBE Inc.
劇的ビフォーアフター
2019/08/31
ビッグローブ株式会社
曽根 大作
〜BIGLOBEのDDDの昔と今〜
BIGLOBE Inc.2
自己紹介
名前:曽根 大作(そね だいさく)
・30歳
・2012年度入社の8年目
・認定スクラムマスター(CSM)
所属・担当業務
・基盤本部 サービス開発部
・BIGLOBEモバイル(格安SIM)の業務システム開発
BIGLOBE Inc.3
今回のテーマ
昔と今
BIGLOBE Inc.4
アジェンダ
・DDDとの出会い
・ビフォーアフター
・モデルの書き方
・状態の表し方
・チェック
・おわりに
BIGLOBE Inc.5
アジェンダ
・DDDとの出会い
・ビフォーアフター
・モデルの書き方
・状態の表し方
・チェック
・おわりに
・DDDとの出会い
・ビフォーアフター
・モデルの書き方
・状態の表し方
・チェック
・おわりに
BIGLOBE Inc.6
DDDとの出会い
・配属先は独自言語の世界
・マニュアルはExcel
BIGLOBE Inc.7
DDDとの出会い
・2年後、Java導入
・設計手法:DDD
・開発手法:Scrum
BIGLOBE Inc.8
DDDとの出会い
新しいサービスからレガシーなシステムへ広げていく
BIGLOBE Inc.
のれん分け方式
9
DDDとの出会い
ノウハウの伝授を重視した方式
BIGLOBE Inc.10
アジェンダ
・DDDとの出会い
・ビフォーアフター
・モデルの書き方
・状態の表し方
・チェック
・おわりに
BIGLOBE Inc.11
アジェンダ
・DDDとの出会い
・ビフォーアフター
・モデルの書き方
・状態の表し方
・チェック
・おわりに
BIGLOBE Inc.12
モデルの書き方
モデルに表す目的・表したいこと
- 業務とコードを一致させる
- エンティティの責務を表す
- エンティティ同士の関連を表現する
- etc . . .
BIGLOBE Inc.13
BEFORE
BIGLOBE Inc.14
モデルの書き方 〜BEFORE〜
当時のやりかた
1. サービスの仕様書から名詞を抽出
2. グルーピング
3. グループに名前をつける
4. キーが必要かどうかを考える
- 必要=エンティティ
- 不要=アグリゲ...
BIGLOBE Inc.15
モデルの書き方 〜BEFORE〜
例:モバイルサービスを申し込んで、契約する
・会員には以下の情報が必要
- 氏名
- 住所
- 生年月日
・ 申し込みに以下の情報が必要
- プラン(月間の容量)
- Simカード...
BIGLOBE Inc.16
モデルの書き方 〜BEFORE〜
BIGLOBE Inc.17
モデルの書き方 〜BEFORE〜
問題点
- 情報不足による認識齟齬多発
- 関連がないため処理の流れをイメージできない
- エンティティの責務や振る舞いがわからない
・・・?
BIGLOBE Inc.
結果
- Pull Requestが大荒れ
- コメント3桁超え
- 認識齟齬が起きてマージされない
- 設計や責務の話
- 指摘ではなく質問が多い
18
モデルの書き方 〜BEFORE〜
BIGLOBE Inc.19
AFTER
BIGLOBE Inc.
解決策
- 情報を増やす
- 責務
- 関連や依存
- 多重度
- 振る舞い
- 値
20
モデルの書き方 〜AFTER〜
BIGLOBE Inc.
1枚の図にすべてを表そうとするのは無理
- 何を伝えたい図なのか分からなくなる
- 好き勝手に修正される or 修正されない
21
モデルの書き方 〜AFTER〜
BIGLOBE Inc.22
モデルの書き方 〜AFTER〜
概念モデル
↓
コンテキストマップ
↓
ドメインモデル
BIGLOBE Inc.23
モデルの書き方 〜AFTER〜
概念モデル
- システム全体を表すモデル
- 代表的なエンティティのみの関連や多重度を表す
- 振る舞いなどは書かない
- イメージは世界地図
BIGLOBE Inc.24
モデルの書き方 〜AFTER〜
BIGLOBE Inc.25
モデルの書き方 〜AFTER〜
コンテキストマップ
- 概念モデルで表現したエンティティの境界を表す
- エンティティとシステムのマッピング
- 振る舞いなどは書かない
- イメージは大陸
BIGLOBE Inc.26
モデルの書き方 〜AFTER〜
BIGLOBE Inc.27
モデルの書き方 〜AFTER〜
ドメインモデル
- UCの処理を表すモデル
- 各エンティティの関連や多重度を表す
- 振る舞いは記載する(引数と返却値)
- イメージはナビ
-> AからBまで何を使ってたどり着くか
BIGLOBE Inc.28
モデルの書き方 〜AFTER〜
BIGLOBE Inc.29
モデルの書き方 〜AFTER〜
やり方を変えてよかったこと
- 目的に合わせてモデルを変えることで、認識齟齬が
起きにくくなった
- Pull Requestで設計の話が出てこなくなった
-> 実装の良し悪しに集中...
BIGLOBE Inc.30
モデルの書き方 〜AFTER〜
今の問題点
- 概念モデルやコンテキストマップからドメインモデ
ルを作るのが大変
考えている解決策
- 間にもう1つモデルがほしい
- イメージ的には日本地図ぐらいの粒度
BIGLOBE Inc.31
アジェンダ
・DDDとの出会い
・ビフォーアフター
・モデルの書き方
・状態の表し方
・チェック
・おわりに
BIGLOBE Inc.32
アジェンダ
・DDDとの出会い
・ビフォーアフター
・モデルの書き方
・状態の表し方
・チェック
・おわりに
BIGLOBE Inc.33
状態の表し方
状態を管理する
申込中 契約中 解約
契約
どうやって表現するか?
BIGLOBE Inc.34
BEFORE
BIGLOBE Inc.35
状態の表し方 〜BEFORE〜
1つのエンティティに対して、イベントをぶら下げる
※イベントとは、業務の記録のこと
業務が記録されれば、状態が更新される
BIGLOBE Inc.36
状態の表し方 〜BEFORE〜
BIGLOBE Inc.37
状態の表し方 〜BEFORE〜
問題点
- エンティティの肥大化
- イベントには基本Getterしかいない
- ロジックが集中してしまう
- 不要なフィールドを意識する必要がある
BIGLOBE Inc.38
状態の表し方 〜BEFORE〜
結果
-エンティティの行数が数百行に
-生成コストが高い
- フィールドにOptionalが増える
- 不要なイベントを意識する必要がある
BIGLOBE Inc.39
AFTER
BIGLOBE Inc.40
状態の表し方 〜AFTER〜
解決策
- 状態ごとに必要な要素のみを持ったエンティティを
生成
BIGLOBE Inc.41
状態の表し方 〜AFTER〜
BIGLOBE Inc.42
状態の表し方 〜AFTER〜
やり方を変えて良かったこと
- エンティティの責務がはっきりする
- 不要なメソッドやフィールドがなくなる
- エンティティが小さくなる
BIGLOBE Inc.43
状態の表し方 〜AFTER〜
今の問題点
- クラス数の増大
- ほぼ同じ内容の用途違いのクラスが増える
- 重複コードも増える
- 名前が長くなる(〇〇のための〇〇みたいな)
BIGLOBE Inc.44
状態の表し方 〜AFTER〜
解決策
- 検討中・・・。
BIGLOBE Inc.45
アジェンダ
・DDDとの出会い
・ビフォーアフター
・モデルの書き方
・状態の表し方
・チェック
・おわりに
BIGLOBE Inc.46
アジェンダ
・DDDとの出会い
・ビフォーアフター
・モデルの書き方
・状態の表し方
・チェック
・おわりに
BIGLOBE Inc.47
チェック
チェックの設計について
- 様々な業務ロジックをどのように表現するか?
- 例:20歳以上
:契約中じゃないと申し込めない
BIGLOBE Inc.48
BEFORE
BIGLOBE Inc.49
チェック 〜BEFORE〜
Application層に業務ロジックが漏れてる状態
BIGLOBE Inc.50
チェック 〜BEFORE〜
BIGLOBE Inc.51
チェック 〜BEFORE〜
問題点
- Application層なのでモデルに表現できない
- 業務以外のロジックと混ざるため、可読性が低い
- テストが複雑になる
BIGLOBE Inc.52
AFTER
BIGLOBE Inc.53
チェック 〜AFTER〜
解決策
- DomainServiceを作成
- チェックに必要な業務ロジックを集約する
- Domain層で業務ロジックを表現する
BIGLOBE Inc.54
チェック 〜AFTER〜
BIGLOBE Inc.55
チェック 〜AFTER〜
やり方を変えてよかったこと
- 業務ロジックとそれ以外が分離できて、読みやすい
- 処理の流れと業務ロジックのそれぞれでテストが行
える
BIGLOBE Inc.56
アジェンダ
・DDDとの出会い
・ビフォーアフター
・モデルの書き方
・状態の表し方
・チェック
・おわりに
BIGLOBE Inc.57
アジェンダ
・DDDとの出会い
・ビフォーアフター
・モデルの書き方
・状態の表し方
・チェック
・おわりに
BIGLOBE Inc.58
おわりに
DDDを始めてから7年、一部ですがBIGLOBEのDDDの昔
と今を紹介させていただきました。
これからもBIGLOBEでは試行錯誤を続けていきます。
みなさんも一緒にレガシーを潰すために、DDDでの試行...
BIGLOBE Inc.
Upcoming SlideShare
Loading in …5
×

劇的ビフォーアフター〜BIGLOBEのDDDの昔と今〜 in 大阪

435 views

Published on

https://yahoo-osaka.connpass.com/event/138020/

Published in: Engineering
  • Be the first to comment

劇的ビフォーアフター〜BIGLOBEのDDDの昔と今〜 in 大阪

  1. 1. BIGLOBE Inc. 劇的ビフォーアフター 2019/08/31 ビッグローブ株式会社 曽根 大作 〜BIGLOBEのDDDの昔と今〜
  2. 2. BIGLOBE Inc.2 自己紹介 名前:曽根 大作(そね だいさく) ・30歳 ・2012年度入社の8年目 ・認定スクラムマスター(CSM) 所属・担当業務 ・基盤本部 サービス開発部 ・BIGLOBEモバイル(格安SIM)の業務システム開発
  3. 3. BIGLOBE Inc.3 今回のテーマ 昔と今
  4. 4. BIGLOBE Inc.4 アジェンダ ・DDDとの出会い ・ビフォーアフター ・モデルの書き方 ・状態の表し方 ・チェック ・おわりに
  5. 5. BIGLOBE Inc.5 アジェンダ ・DDDとの出会い ・ビフォーアフター ・モデルの書き方 ・状態の表し方 ・チェック ・おわりに ・DDDとの出会い ・ビフォーアフター ・モデルの書き方 ・状態の表し方 ・チェック ・おわりに
  6. 6. BIGLOBE Inc.6 DDDとの出会い ・配属先は独自言語の世界 ・マニュアルはExcel
  7. 7. BIGLOBE Inc.7 DDDとの出会い ・2年後、Java導入 ・設計手法:DDD ・開発手法:Scrum
  8. 8. BIGLOBE Inc.8 DDDとの出会い 新しいサービスからレガシーなシステムへ広げていく
  9. 9. BIGLOBE Inc. のれん分け方式 9 DDDとの出会い ノウハウの伝授を重視した方式
  10. 10. BIGLOBE Inc.10 アジェンダ ・DDDとの出会い ・ビフォーアフター ・モデルの書き方 ・状態の表し方 ・チェック ・おわりに
  11. 11. BIGLOBE Inc.11 アジェンダ ・DDDとの出会い ・ビフォーアフター ・モデルの書き方 ・状態の表し方 ・チェック ・おわりに
  12. 12. BIGLOBE Inc.12 モデルの書き方 モデルに表す目的・表したいこと - 業務とコードを一致させる - エンティティの責務を表す - エンティティ同士の関連を表現する - etc . . .
  13. 13. BIGLOBE Inc.13 BEFORE
  14. 14. BIGLOBE Inc.14 モデルの書き方 〜BEFORE〜 当時のやりかた 1. サービスの仕様書から名詞を抽出 2. グルーピング 3. グループに名前をつける 4. キーが必要かどうかを考える - 必要=エンティティ - 不要=アグリゲート
  15. 15. BIGLOBE Inc.15 モデルの書き方 〜BEFORE〜 例:モバイルサービスを申し込んで、契約する ・会員には以下の情報が必要 - 氏名 - 住所 - 生年月日 ・ 申し込みに以下の情報が必要 - プラン(月間の容量) - Simカードのサイズと種別 ・ 申し込まれたらSimカードを配送する
  16. 16. BIGLOBE Inc.16 モデルの書き方 〜BEFORE〜
  17. 17. BIGLOBE Inc.17 モデルの書き方 〜BEFORE〜 問題点 - 情報不足による認識齟齬多発 - 関連がないため処理の流れをイメージできない - エンティティの責務や振る舞いがわからない ・・・?
  18. 18. BIGLOBE Inc. 結果 - Pull Requestが大荒れ - コメント3桁超え - 認識齟齬が起きてマージされない - 設計や責務の話 - 指摘ではなく質問が多い 18 モデルの書き方 〜BEFORE〜
  19. 19. BIGLOBE Inc.19 AFTER
  20. 20. BIGLOBE Inc. 解決策 - 情報を増やす - 責務 - 関連や依存 - 多重度 - 振る舞い - 値 20 モデルの書き方 〜AFTER〜
  21. 21. BIGLOBE Inc. 1枚の図にすべてを表そうとするのは無理 - 何を伝えたい図なのか分からなくなる - 好き勝手に修正される or 修正されない 21 モデルの書き方 〜AFTER〜
  22. 22. BIGLOBE Inc.22 モデルの書き方 〜AFTER〜 概念モデル ↓ コンテキストマップ ↓ ドメインモデル
  23. 23. BIGLOBE Inc.23 モデルの書き方 〜AFTER〜 概念モデル - システム全体を表すモデル - 代表的なエンティティのみの関連や多重度を表す - 振る舞いなどは書かない - イメージは世界地図
  24. 24. BIGLOBE Inc.24 モデルの書き方 〜AFTER〜
  25. 25. BIGLOBE Inc.25 モデルの書き方 〜AFTER〜 コンテキストマップ - 概念モデルで表現したエンティティの境界を表す - エンティティとシステムのマッピング - 振る舞いなどは書かない - イメージは大陸
  26. 26. BIGLOBE Inc.26 モデルの書き方 〜AFTER〜
  27. 27. BIGLOBE Inc.27 モデルの書き方 〜AFTER〜 ドメインモデル - UCの処理を表すモデル - 各エンティティの関連や多重度を表す - 振る舞いは記載する(引数と返却値) - イメージはナビ -> AからBまで何を使ってたどり着くか
  28. 28. BIGLOBE Inc.28 モデルの書き方 〜AFTER〜
  29. 29. BIGLOBE Inc.29 モデルの書き方 〜AFTER〜 やり方を変えてよかったこと - 目的に合わせてモデルを変えることで、認識齟齬が 起きにくくなった - Pull Requestで設計の話が出てこなくなった -> 実装の良し悪しに集中することができる
  30. 30. BIGLOBE Inc.30 モデルの書き方 〜AFTER〜 今の問題点 - 概念モデルやコンテキストマップからドメインモデ ルを作るのが大変 考えている解決策 - 間にもう1つモデルがほしい - イメージ的には日本地図ぐらいの粒度
  31. 31. BIGLOBE Inc.31 アジェンダ ・DDDとの出会い ・ビフォーアフター ・モデルの書き方 ・状態の表し方 ・チェック ・おわりに
  32. 32. BIGLOBE Inc.32 アジェンダ ・DDDとの出会い ・ビフォーアフター ・モデルの書き方 ・状態の表し方 ・チェック ・おわりに
  33. 33. BIGLOBE Inc.33 状態の表し方 状態を管理する 申込中 契約中 解約 契約 どうやって表現するか?
  34. 34. BIGLOBE Inc.34 BEFORE
  35. 35. BIGLOBE Inc.35 状態の表し方 〜BEFORE〜 1つのエンティティに対して、イベントをぶら下げる ※イベントとは、業務の記録のこと 業務が記録されれば、状態が更新される
  36. 36. BIGLOBE Inc.36 状態の表し方 〜BEFORE〜
  37. 37. BIGLOBE Inc.37 状態の表し方 〜BEFORE〜 問題点 - エンティティの肥大化 - イベントには基本Getterしかいない - ロジックが集中してしまう - 不要なフィールドを意識する必要がある
  38. 38. BIGLOBE Inc.38 状態の表し方 〜BEFORE〜 結果 -エンティティの行数が数百行に -生成コストが高い - フィールドにOptionalが増える - 不要なイベントを意識する必要がある
  39. 39. BIGLOBE Inc.39 AFTER
  40. 40. BIGLOBE Inc.40 状態の表し方 〜AFTER〜 解決策 - 状態ごとに必要な要素のみを持ったエンティティを 生成
  41. 41. BIGLOBE Inc.41 状態の表し方 〜AFTER〜
  42. 42. BIGLOBE Inc.42 状態の表し方 〜AFTER〜 やり方を変えて良かったこと - エンティティの責務がはっきりする - 不要なメソッドやフィールドがなくなる - エンティティが小さくなる
  43. 43. BIGLOBE Inc.43 状態の表し方 〜AFTER〜 今の問題点 - クラス数の増大 - ほぼ同じ内容の用途違いのクラスが増える - 重複コードも増える - 名前が長くなる(〇〇のための〇〇みたいな)
  44. 44. BIGLOBE Inc.44 状態の表し方 〜AFTER〜 解決策 - 検討中・・・。
  45. 45. BIGLOBE Inc.45 アジェンダ ・DDDとの出会い ・ビフォーアフター ・モデルの書き方 ・状態の表し方 ・チェック ・おわりに
  46. 46. BIGLOBE Inc.46 アジェンダ ・DDDとの出会い ・ビフォーアフター ・モデルの書き方 ・状態の表し方 ・チェック ・おわりに
  47. 47. BIGLOBE Inc.47 チェック チェックの設計について - 様々な業務ロジックをどのように表現するか? - 例:20歳以上 :契約中じゃないと申し込めない
  48. 48. BIGLOBE Inc.48 BEFORE
  49. 49. BIGLOBE Inc.49 チェック 〜BEFORE〜 Application層に業務ロジックが漏れてる状態
  50. 50. BIGLOBE Inc.50 チェック 〜BEFORE〜
  51. 51. BIGLOBE Inc.51 チェック 〜BEFORE〜 問題点 - Application層なのでモデルに表現できない - 業務以外のロジックと混ざるため、可読性が低い - テストが複雑になる
  52. 52. BIGLOBE Inc.52 AFTER
  53. 53. BIGLOBE Inc.53 チェック 〜AFTER〜 解決策 - DomainServiceを作成 - チェックに必要な業務ロジックを集約する - Domain層で業務ロジックを表現する
  54. 54. BIGLOBE Inc.54 チェック 〜AFTER〜
  55. 55. BIGLOBE Inc.55 チェック 〜AFTER〜 やり方を変えてよかったこと - 業務ロジックとそれ以外が分離できて、読みやすい - 処理の流れと業務ロジックのそれぞれでテストが行 える
  56. 56. BIGLOBE Inc.56 アジェンダ ・DDDとの出会い ・ビフォーアフター ・モデルの書き方 ・状態の表し方 ・チェック ・おわりに
  57. 57. BIGLOBE Inc.57 アジェンダ ・DDDとの出会い ・ビフォーアフター ・モデルの書き方 ・状態の表し方 ・チェック ・おわりに
  58. 58. BIGLOBE Inc.58 おわりに DDDを始めてから7年、一部ですがBIGLOBEのDDDの昔 と今を紹介させていただきました。 これからもBIGLOBEでは試行錯誤を続けていきます。 みなさんも一緒にレガシーを潰すために、DDDでの試行 錯誤を積み重ねていきましょう。
  59. 59. BIGLOBE Inc.

×