Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPでドメイン駆動設計を浸透するためにやったことと現状

188fa094614c1d9ec7dd01d4c568e4ca?s=47 mashirou1234
February 16, 2020

 PHPでドメイン駆動設計を浸透するためにやったことと現状

188fa094614c1d9ec7dd01d4c568e4ca?s=128

mashirou1234

February 16, 2020
Tweet

Transcript

  1. PHPでドメイン駆動設計を 浸透するためにやったことと 現状 Object-Oriented Conference しろぐちゆうま (@yu_mashirou)

  2. Introductions Name: 代口勇真 (しろぐち ゆうま) Twitter: 柚口ましろう(ゆぐち ましろう) @yu_mashirou •

    株式会社C-Garden ◦ CTOの席に座っているフリが得意
  3. 前日譚 • PHP Conference ◦ https://is.gd/HPqLTU • PHPerKaigi ◦ https://is.gd/7ofA6v

  4. プロダクトを始める! よーし、アーキテクチャ選 定するぞ! ぼく

  5. プロダクトを始める! よーし、アーキテクチャ選 定するぞ! ごめん、今日から君 Androidの案件ね! ぼく マネージャー

  6. プロダクトを始める! よーし、アーキテクチャ選 定するぞ! ごめん、今日から君 Androidの案件ね! ぼく マネージャー

  7. プロダクトを始める! 外から応援する人に

  8. • 今回期待されている役割 プロダクトを始める! 外から応援する人に

  9. • 今回期待されている役割 ◦ オブザーバで外から口出しする 人みたいな感じ ◦ いわゆるフォロー役 プロダクトを始める! 外から応援する人に

  10. • 今回期待されている役割 ◦ オブザーバで外から口出しする 人みたいな感じ ◦ いわゆるフォロー役 プロダクトを始める! 外から応援する人に

  11. プロダクトを始める! 外から応援する人に ――某日。 最近設計の勉強やって るって聞いたんですけど 多少はやってますよ ぼく プロダクト リーダー

  12. プロダクトを始める! 外から応援する人に ――某日。 ドメイン駆動設計について 教えて下さい! 多少はやってますよ ぼく プロダクト リーダー

  13. プロダクトを始める! 外から応援する人に ドメイン駆動設計について 教えて下さい! えっ ――某日。 プロダクト リーダー ぼく

  14. プロダクトを始める! 外から応援する人に ドメイン駆動設計について教えて下さい!

  15. 大混乱

  16. 大混乱 https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html https://dzone.com/articles/onion-architecture-is-interesting

  17. 大混乱 ぼく https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html https://dzone.com/articles/onion-architecture-is-interesting

  18. 大混乱 ぼく アーキテクチャの話やないかい https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html https://dzone.com/articles/onion-architecture-is-interesting

  19. ドメイン駆動設計 (DDD) って何……?

  20. ドメイン駆動設計 (DDD) って何……? ざっくり説明したもの • システムがビジネスにおいて どの領域に対応しているかを策定するもの(とした) • 課題を解決するためにドメイン(ここでは機能)を 提供する可変に耐えうる粒度の策定

  21. ドメイン駆動設計 (DDD) って何……? ざっくり説明したもの • システムがビジネスにおいて どの領域に対応しているかを策定するもの(とした) • 課題を解決するためにドメイン(ここでは機能)を 提供する可変に耐えうる粒度の策定

  22. ドメイン駆動設計 (DDD) って何……? ざっくり説明したもの • システムがビジネスにおいて どの領域に対応しているかを策定するもの(とした) • 課題を解決するためにドメイン(ここでは機能)を 提供する可変に耐えうる粒度の策定

  23. 課題 ドメイン領域の理解

  24. ドメイン領域の理解 • ドメイン領域とは?

  25. ドメイン領域の理解 • ドメイン領域とは? https://www.nri.com/jp/knowledge/glossary/lst/ta/domain

  26. ドメイン領域の理解 • ドメイン領域とは? https://www.nri.com/jp/knowledge/glossary/lst/ta/domain さっぱどわがんね ¯\_(ツ)_/¯

  27. ドメイン領域の理解 • ドメイン領域とは? https://keiei-manabu.com/strategy/businessdomain.html

  28. ドメイン領域の理解 • ドメイン領域とは? https://keiei-manabu.com/strategy/businessdomain.html なんとなく分かる……?

  29. そもそも経営用語だし!

  30. • ドメイン領域とは? https://codezine.jp/article/detail/9744 ドメイン領域の理解 (わかる版)

  31. ドメイン領域の理解 (わかる版) • ドメイン領域とは? コア・ドメイン • 経営・事業サイドが抱えている 根本的な問題 • 企業が持つ理念と方針

    サブ・ドメイン • 内部的に必要とされる 対外的には認識されない問題 ◦ 今回は認識する必要のない 課題 境界づけられたコンテキスト • 課題として解決したい モノ・コトを共通化する • 5W1H
  32. ドメイン領域の理解 (わかる版) • ドメイン領域とは? コア・ドメイン • 経営・事業サイドが抱えている 根本的な問題 • 企業が持つ理念と方針

    サブ・ドメイン • 内部的に必要とされる 対外的には認識されない問題 ◦ 今回は認識する必要のない 課題 境界づけられたコンテキスト • 課題として解決したい モノ・コトを共通化する • 5W1H 一番重要
  33. 課題 アーキテクチャ選定

  34. アーキテクチャ選定 https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html https://dzone.com/articles/onion-architecture-is-interesting

  35. アーキテクチャ選定 https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html https://dzone.com/articles/onion-architecture-is-interesting

  36. アーキテクチャ選定 • Application ◦ Controller • Domain ◦ UseCase ◦

    Entity • Infrastructure ◦ DB(Eloquent) ◦ ExternalAPI ※ExternalInterface
  37. アーキテクチャ選定 • Application ◦ Controller • Domain ◦ UseCase ◦

    Entity • Infrastructure ◦ DB(Eloquent) ◦ ExternalAPI ※ExternalInterface Our Business Logic
  38. 課題 ディレクトリ設計 (ただしPHPに限る)

  39. ディレクトリ設計 • 基本はPHPのComposerと フレームワークのLaravelに従う • UMLのクラス図で起こす

  40. ディレクトリ設計 • 基本はPHPのComposerと フレームワークのLaravelに従う • UMLのクラス図で起こす Product ├─app │ ├─Console

    │ ├─Exceptions │ ├─Http │ │ ├─Controllers │ │ ├─Middleware │ │ ├─Models │ │ ├─Session │ │ └─Validation │ └─Providers ├─Domain │ ├─Models │ │ ├─Entities │ │ │ ├─Applications │ │ └─Repositories │ └─Usecase └─Infra   ├─Eloquent   └─Storage
  41. ディレクトリ設計 • 基本はPHPのComposerと フレームワークのLaravelに従う • UMLのクラス図で起こす Product ├─app │ ├─Console

    │ ├─Exceptions │ ├─Http │ │ ├─Controllers │ │ ├─Middleware │ │ ├─Models │ │ ├─Session │ │ └─Validation │ └─Providers ├─Domain │ ├─Models │ │ ├─Entities │ │ │ └─Applications │ │ └─Repositories │ └─Usecase └─Infra   ├─Eloquent   └─Storage
  42. ディレクトリ設計 • 基本はPHPのComposerと フレームワークのLaravelに従う • UMLのクラス図で起こす

  43. 課題 Infrastructure層の定義

  44. Infrastructure層の定義 • 管理画面 • API通信

  45. Infrastructure層の定義 • 管理画面 • API通信

  46. Infrastructure層の定義 • 管理画面 • API通信 ※API内別API通信あり

  47. Infrastructure層の定義 • 管理画面 • API通信 ※API内別API通信あり

  48. 失敗 形(画面)から入った ドメイン設計

  49. 形(画面) から入った ドメイン設計 • 画面から入るとControllerでの役割が 偏りがち

  50. 形(画面) から入った ドメイン設計 • 画面から入るとControllerでの役割が 偏りがち 本来の役割は移譲なのでデータ構造 を生成する時点でバリデーションを完 成させておく必要がある

  51. 形(画面) から入った ドメイン設計 • 画面から入るとControllerでの役割が 偏りがち 本来の役割は移譲なのでデータ構造 を生成する時点でバリデーションを完 成させておく必要がある

  52. 見たい人向け

  53. 形(画面) から入った ドメイン設計 • 画面から入るとControllerでの役割が 偏りがち 本来の役割は移譲なのでデータ構造 を生成する時点でバリデーションを完 成させておく必要がある

  54. 見たい人向け

  55. 形(画面) から入った ドメイン設計 _人人人人_ > 現実 <  ̄Y^Y^Y^Y^ ̄

  56. 結果 半分くらい浸透した

  57. 半分くらい浸透した • 結果的に浸透できた範囲 ◦ ディレクトリ設計 ◦ アーキテクチャ ◦ Infrastructureの扱い

  58. 半分くらい浸透した • 結果的に浸透できた範囲 ◦ ディレクトリ設計 ◦ アーキテクチャ ◦ Infrastructureの扱い •

    まだ出来てない ◦ ドメイン駆動設計
  59. DDD浸透してないやん!

  60. DDD浸透してない! • 100%浸透させることは最初から考えてない • 事業サイドの考えを共有するのは、ビジネスの目的を深くまで追求する 心が必要 • チーム内の空気感をコントロールするにはまだ時間が必要そう

  61. ドメイン駆動設計の浸透は 始まったばかりだ!

  62. ドメイン駆動設計の浸透は 始まったばかりだ! (っていうENDはだめですか?)

  63. EoF