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.

ドメイン駆動設計とマイクロサービス

1,726 views

Published on

2019年05月11日に開催された「レガシーをぶっつぶせ。現場でDDD!」の発表資料です。
https://genbade-ddd.connpass.com/event/127494/

Published in: Technology
  • Be the first to comment

ドメイン駆動設計とマイクロサービス

  1. 1. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 2019年5月11日 ヤフー株式会社 三石 広樹 ドメイン駆動設計と マイクロサービス
  2. 2. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 自己紹介 2 三石 広樹 • 2015/04 NTTグループ会社 入社 • 音響処理ライブラリ開発 • VRアプリ開発 • IoT基盤開発 • 2018/04 Yahoo! JAPAN 入社 • PF開発 ← 現在
  3. 3. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ドメイン駆動設計とマイクロサービス 3 本日の内容 1. ハマらないマイクロサービス 2. ドメイン駆動設計で切り込む 3. システムを変えていく
  4. 4. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ハマらない マイクロサービス
  5. 5. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. システム説明 5 ○×△ ポイントプレゼント! ポイント プレゼント! コンテンツ表示
  6. 6. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 入稿システム 6 ページ シナリオ 条件 コンテンツグループ コンテンツ ページ指定、パラメータ コンテンツ 入稿担当入稿ツール 入稿システム ポイント プレゼント︕
  7. 7. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 開発のモチベーション 7 エンジニア育成 マイクロサービス モダンなシステムを目指して開発 The Twelve Factors
  8. 8. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. データモデル 8 シナリオ情報ページ情報 コンテンツ情報 ページ シナリオ コンテンツ グループ コンテンツ 条件
  9. 9. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. サービス構成 9・・・マイクロサービス? ページ コンテンツ コンテンツ グループ コンテンツ グループ コンテンツ グループ シナリオ 条件 ページ テーブル コンテンツ テーブル コンテンツグループ テーブル シナリオ テーブル 条件 テーブル バリデート
  10. 10. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. サービス構成 10 ページ コンテンツ コンテンツ グループ コンテンツ グループ コンテンツ グループ シナリオ 条件 ページ テーブル コンテンツ テーブル コンテンツグループ テーブル シナリオ テーブル 条件 テーブル バリデート ページ パッケージ シナリオ パッケージ コンテンツ パッケージ バリデート パッケージ まるでモノリシックなシステム のパッケージのような・・・
  11. 11. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. システムが抱えた課題 11 変化に弱い • 改修範囲が広い • 改修箇所の特定が困難 • デプロイが複雑 開発チーム コンテンツのバリデーション ルール変更して! レガシー化 企画 ページ コンテンツ コンテンツ グループ コンテンツ グループ コンテンツ グループシナリオ 条件 ページ テーブル コンテンツ テーブル コンテンツグループ テーブル シナリオ テーブル 条件 テーブル バリデート? ? ? ? ?
  12. 12. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. なにかの「考え」が足りていない 12 ビジネスとサービスの不一致 ビジネスとサービスの不一致 ビジネスとサービスの不一致 ビジネスとサービスの不一致
  13. 13. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ドメイン駆動設計で 切り込む
  14. 14. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ドメイン駆動設計で切り込む モチベーション
  15. 15. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. モチベーション 15 • 改修範囲が広い • 改修箇所の特定が困難 • デプロイが複雑 マイクロサービスの切り方がよくない
  16. 16. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. モチベーション 16 マイクロサービス化の指標がほしい ドメイン駆動設計の 発想・手法に着目
  17. 17. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ひとつのマイクロサービスで ひとつのドメインの問題を解決 モチベーション 17 ソフトウェアは ビジネス課題(ドメイン)を解決する ために在る
  18. 18. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. これまでの設計 18 商品管理 API 注文管理 API 1. データ設計をして 2. Web APIに切り分ける 機能単位 で分割 請求金額 配送先 … 在庫数 … … 注文 商品
  19. 19. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 配送 これからの設計 19 商品API 経理API配送API 1. モデリングをして 2. Web APIに切り分ける コンテキストの境界を探る 集約を見つける ドメイン で分割 配送先 … … … … … 請求金額 … … 注文(配送) 商品 注文(経理) 経理
  20. 20. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. これからの設計 20 モデル(ビジネス視点)をベースに システムを考える データ(技術視点)をベースに システムを考える
  21. 21. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ドメイン駆動設計で切り込む 現場で実践
  22. 22. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 新しい案件 22 コンテンツを一括作成できるツールがほしい。 • 共通項目とコンテンツ毎の項目がある。 • 入稿システムとのデータ連携が要る。 • 入力項目をテンプレから選べるようにする。企画
  23. 23. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 新しい案件 23 共通項目 個別項目1 ショッピングページページ 1000pプレゼント文言 500pプレゼント文言 http://hoge.com遷移先 テンプレAテンプレ http://fuga.com遷移先 個別項目2 コンテンツ1kp • ページ:ショッピングページ • 文言 :1000pプレゼント • 遷移先:http://hoge.com コンテンツ500p • ページ:ショッピングページ • 文言 :500pプレゼント • 遷移先:http://fuga.com 作成
  24. 24. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 入稿システム 新しい案件 24 ? ?? データ連携 新規システム
  25. 25. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ドメイン駆動設計をはじめよう 25 ドメインをモデリングしよう!! ドメイン駆動設計 試したい !? 自分 チームメンバ
  26. 26. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. モデリング 26 ユーザはなににどんな関心が あるのか? 関心事をモデリング(設計)しよう
  27. 27. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. モデリング 27 共通項目 コンテンツ 入力値 個別項目 テンプレート 入力項目 1. モデルを洗い出す 共通項目 入力値 コンテンツテンプレート 入力項目 2. 関係を整理する
  28. 28. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. モデリング 28 共通項目 コンテンツ 入力値 テンプレート 入力項目 3. なにか違和感 コンテンツ セット 共通項目 コンテンツ 入力値 テンプレート 入力項目 4. 新しい関心事が見えた コンテンツセット と共有項目がある
  29. 29. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. モデリング 29 表面化していないモデルを定義した • まだ曖昧なモデルを見つけた • これから必要になると予想した ビジネスも常に成長途中 エンジニアがモデル明確化をフォロー
  30. 30. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. モデリング 30 コンテンツ 入力値 テンプレート 入力項目 集約とコンテキスト コンテンツ セット 共通項目 コンテンツセット コンテキスト テンプレート コンテキスト コンテンツ セット テンプレート コンテンツセットを集約として 登録・更新・閲覧・削除ができる テンプレートを集約として 登録・更新・閲覧・削除ができる APIに分割
  31. 31. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. モデリング 31 集約をユースケースから考えた • ユーザの操作対象がなにかを追求した • 操作する単位をビジネスサイドと議論 ビジネス視点で考えて ドメインを操作したい単位を見極める
  32. 32. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 入稿システム 新規システム 32 コンテンツ セット テンプレートマッピング 入稿コンテキスト コンテンツコンテキスト
  33. 33. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 33 クリーンアーキテクチャ REST API パッケージ構成 出典:The Clean Code Blog by Robert C. Martin (Uncle Bob) http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html Interface • Controller Application • Use Case Domain • Model • Repository • Service Infrastructure • Repository/Persistence DIP 依存性逆転
  34. 34. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ドメイン駆動設計で切り込む 実践を終えて
  35. 35. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 得られたメリット 35 • 改修範囲が広い • 改修箇所の特定が困難 • デプロイが複雑 ビジネスとサービスの単位一致により局 所化 クリーンアーキテクチャで明確化 変更のあったサービスだけのリリース
  36. 36. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 得られたメリット 36 考慮漏れ リファクタ 機能追加 仕様変更 ドメイン駆動設計が守る コンテンツ セット テンプレートマッピング
  37. 37. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 気付いた難しさ 37 チーム 技術 • ドメイン駆動設計の理解を得難い • 複数チームだと難しい • 初期実装コストが高い • ドメインを守ることが大変
  38. 38. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. これから守りたいポイント 38 モデリングとサービス分割 実装は後でリファクタリングできるけど サービスの分離は容易でない 最初のシステム設計が肝心
  39. 39. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. システムを変えていく
  40. 40. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 既存システム再構築計画 40 ドメイン駆動 設計後の姿? ① ② ③ 段階を踏んで理想の姿へ ページ コンテンツ コンテンツ グループ コンテンツ グループ コンテンツ グループシナリオ 条件 ページ テーブル コンテンツ テーブル コンテンツグループ テーブル シナリオ テーブル 条件 テーブル バリデート
  41. 41. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 変化 未来のために 41 この壁を壊すのはエンジニア コンテンツ セット テンプレートマッピング
  42. 42. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 変化 未来のために 42 この壁を築くのもエンジニア コンテンツ セット テンプレートマッピング
  43. 43. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 未来のために 43 次のレガシーを残さない
  44. 44. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 44 EOF

×