12. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
なにかの「考え」が足りていない
12
ビジネスとサービスの不一致
ビジネスとサービスの不一致
ビジネスとサービスの不一致
ビジネスとサービスの不一致
13. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ドメイン駆動設計で
切り込む
14. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.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. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
これまでの設計
18
商品管理
API
注文管理
API
1. データ設計をして 2. Web APIに切り分ける
機能単位
で分割
請求金額
配送先
…
在庫数
…
…
注文
商品
19. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
配送
これからの設計
19
商品API 経理API配送API
1. モデリングをして 2. Web APIに切り分ける
コンテキストの境界を探る
集約を見つける
ドメイン
で分割
配送先
…
…
…
…
…
請求金額
…
…
注文(配送)
商品 注文(経理)
経理
20. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
これからの設計
20
モデル(ビジネス視点)をベースに
システムを考える
データ(技術視点)をベースに
システムを考える
21. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ドメイン駆動設計で切り込む
現場で実践
22. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
新しい案件
22
コンテンツを一括作成できるツールがほしい。
• 共通項目とコンテンツ毎の項目がある。
• 入稿システムとのデータ連携が要る。
• 入力項目をテンプレから選べるようにする。企画
31. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
モデリング
31
集約をユースケースから考えた
• ユーザの操作対象がなにかを追求した
• 操作する単位をビジネスサイドと議論
ビジネス視点で考えて
ドメインを操作したい単位を見極める
32. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
入稿システム
新規システム
32
コンテンツ
セット
テンプレートマッピング
入稿コンテキスト コンテンツコンテキスト
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. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.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.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
次のレガシーを残さない