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

1.8K Views

November 11, 19

スライド概要

2019/8/31 にヤフー大阪オフィスで開催したドメイン駆動設計(DDD)のカンファレンスで発表したスライドです。開発現場でマイクロサービスを実践してもなかなかうまくいかないかと思います。そこで、ドメイン駆動設計の考え・テクニックを使うことでマイクロサービスを成立させようと試行錯誤した体験を発表します。

「Mix Leap Study 特別編 - レガシーをぶっつぶせ。現場でDDD! コラボカンファレンス」
https://yahoo-osaka.connpass.com/event/138020/
「設計の楽しさを伝えたい!「Mix Leap Study 特別編 レガシーをぶっつぶせ。現場でDDD!」を開催しました」
https://techblog.yahoo.co.jp/entry/20190909749503/

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ドメイン駆動設計と マイクロサービス 2019年5月11日 ヤフー株式会社 三石 広樹 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

2.

自己紹介 三石 広樹 • • 2015/04 NTTグループ会社 入社 • 音響処理ライブラリ開発 • VRアプリ開発 • IoT基盤開発 2018/04 Yahoo! JAPAN 入社 • PF開発 ← 現在 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 2

3.

ドメイン駆動設計とマイクロサービス 本日の内容 1. ハマらないマイクロサービス 2. ドメイン駆動設計で切り込む 3. システムを変えていく Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 3

4.

ハマらない マイクロサービス Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

5.

システム説明 コンテンツ表示 ポイント プレゼント! ○×△ ポイントプレゼント! Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 5

6.

入稿システム ポイント ページ指定、パラメータ プレゼント︕ コンテンツ ページ 入稿システム シナリオ 条件 入稿ツール 入稿担当 コンテンツグループ コンテンツ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 6

7.

開発のモチベーション モダンなシステムを目指して開発 エンジニア育成 マイクロサービス Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. The Twelve Factors 7

8.

データモデル コンテンツ ページ情報 シナリオ情報 ページ シナリオ コンテンツ グループ 条件 コンテンツ情報 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 8

9.

サービス構成 ページ シナリオ 条件 ページ テーブル シナリオ テーブル 条件 テーブル コンテンツ コンテンツ コンテンツ コンテンツ グループ グループ グループ バリデート コンテンツ コンテンツグループ テーブル テーブル ・・・マイクロサービス? Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 9

10.

サービス構成 ページ パッケージ ページ ページ テーブル シナリオ パッケージ シナリオ 条件 コンテンツ パッケージ コンテンツ コンテンツ コンテンツ コンテンツ グループ グループ グループ バリデート パッケージ バリデート まるでモノリシックなシステム 条件 コンテンツ コンテンツグループ シナリオ テーブル テーブル テーブル テーブル のパッケージのような・・・ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 10

11.

システムが抱えた課題 コンテンツのバリデーション ルール変更して! 変化に弱い • 改修範囲が広い • 改修箇所の特定が困難 • デプロイが複雑 企画 ? ? ? ページ シナリオ 条件 ページ テーブル シナリオ テーブル 条件 テーブル コンテンツ 開発チーム ? ? コンテンツ コンテンツ コンテンツ グループ グループ グループ コンテンツ コンテンツグループ テーブル テーブル Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. バリデート レガシー化 11

12.

なにかの「考え」が足りていない ビジネスとサービスの不一致 ビジネスとサービスの不一致 ビジネスとサービスの不一致 ビジネスとサービスの不一致 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 12

13.

ドメイン駆動設計で 切り込む Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

14.

ドメイン駆動設計で切り込む モチベーション Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

15.

モチベーション • 改修範囲が広い • 改修箇所の特定が困難 • デプロイが複雑 マイクロサービスの切り方がよくない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 15

16.

モチベーション マイクロサービス化の指標がほしい ドメイン駆動設計の 発想・手法に着目 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 16

17.

モチベーション ソフトウェアは ビジネス課題(ドメイン)を解決する ために在る ひとつのマイクロサービスで ひとつのドメインの問題を解決 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 17

18.

これまでの設計 1. データ設計をして 2. Web APIに切り分ける 注文 請求金額 配送先 … 商品 在庫数 … … Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 機能単位 で分割 商品管理 API 注文管理 API 18

19.

これからの設計 1. モデリングをして 2. Web APIに切り分ける コンテキストの境界を探る 配送 集約を見つける 注文(配送) 配送先 … … 経理 注文(経理) 商品 … … … 請求金額 … … Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ドメイン で分割 商品API 配送API 経理API 19

20.

これからの設計 データ(技術視点)をベースに システムを考える モデル(ビジネス視点)をベースに システムを考える Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 20

21.

ドメイン駆動設計で切り込む 現場で実践 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

22.

新しい案件 企画 コンテンツを一括作成できるツールがほしい。 • 共通項目とコンテンツ毎の項目がある。 • 入稿システムとのデータ連携が要る。 • 入力項目をテンプレから選べるようにする。 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 22

23.

新しい案件 ページ ショッピングページ 共通項目 テンプレ 文言 テンプレA コンテンツ1kp • ページ:ショッピングページ • 文言 :1000pプレゼント • 遷移先:http://hoge.com 1000pプレゼント 個別項目1 作成 遷移先 文言 http://hoge.com コンテンツ500p 500pプレゼント 個別項目2 遷移先 http://fuga.com Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. • ページ:ショッピングページ • 文言 :500pプレゼント • 遷移先:http://fuga.com 23

24.

新しい案件 新規システム データ連携 入稿システム ? Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ? ? 24

25.

ドメイン駆動設計をはじめよう ドメインをモデリングしよう!! !? 自分 ドメイン駆動設計 試したい Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. チームメンバ 25

26.

モデリング ユーザはなににどんな関心が あるのか? 関心事をモデリング(設計)しよう Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 26

27.

モデリング 1. モデルを洗い出す 2. 関係を整理する 共通項目 個別項目 共通項目 テンプレート コンテンツ テンプレート コンテンツ 入力項目 入力値 入力項目 入力値 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 27

28.

モデリング 3. なにか違和感 4. 新しい関心事が見えた 共通項目 テンプレート コンテンツ 入力項目 入力値 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. コンテンツセット と共有項目がある 共通項目 コンテンツ セット テンプレート コンテンツ 入力項目 入力値 28

29.

モデリング 表面化していないモデルを定義した • まだ曖昧なモデルを見つけた • これから必要になると予想した ビジネスも常に成長途中 エンジニアがモデル明確化をフォロー Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 29

30.

モデリング 集約とコンテキスト コンテンツ セット 共通項目 コンテンツセット コンテキスト テンプレート コンテキスト テンプレート コンテンツ コンテンツ セット コンテンツセットを集約として 登録・更新・閲覧・削除ができる APIに分割 テンプレート 入力項目 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 入力値 テンプレートを集約として 登録・更新・閲覧・削除ができる 30

31.

モデリング 集約をユースケースから考えた • ユーザの操作対象がなにかを追求した • 操作する単位をビジネスサイドと議論 ビジネス視点で考えて ドメインを操作したい単位を見極める Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 31

32.

新規システム 入稿コンテキスト コンテンツコンテキスト 入稿システム マッピング Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. コンテンツ セット テンプレート 32

33.

クリーンアーキテクチャ REST API パッケージ構成 Interface • Controller Application • Use Case Infrastructure • Repository/Persistence DIP 依存性逆転 Domain 出典:The Clean Code Blog by Robert C. Martin (Uncle Bob) http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. • • • Model Repository Service 33

34.

ドメイン駆動設計で切り込む 実践を終えて Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

35.

得られたメリット • 改修範囲が広い ビジネスとサービスの単位一致により局 所化 • 改修箇所の特定が困難 クリーンアーキテクチャで明確化 • デプロイが複雑 変更のあったサービスだけのリリース Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 35

36.

得られたメリット リファクタ ドメイン駆動設計が守る 機能追加 考慮漏れ 仕様変更 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. マッピング コンテンツ セット テンプレート 36

37.

気付いた難しさ チーム 技術 • ドメイン駆動設計の理解を得難い • 複数チームだと難しい • 初期実装コストが高い • ドメインを守ることが大変 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 37

38.

これから守りたいポイント モデリングとサービス分割 実装は後でリファクタリングできるけど サービスの分離は容易でない 最初のシステム設計が肝心 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 38

39.

システムを変えていく Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

40.

既存システム再構築計画 ① ページ シナリオ 条件 ページ テーブル シナリオ テーブル 条件 テーブル ② コンテンツ コンテンツ コンテンツ コンテンツ グループ グループ グループ 段階を踏んで理想の姿へ コンテンツ コンテンツグループ テーブル テーブル ? Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. バリデート ③ ドメイン駆動 設計後の姿 40

41.

未来のために この壁を壊すのはエンジニア 変化 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. マッピング コンテンツ セット テンプレート 41

42.

未来のために この壁を築くのもエンジニア 変化 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. マッピング コンテンツ セット テンプレート 42

43.

未来のために 次のレガシーを残さない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 43

44.

EOF Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 44