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

脱軽量DDDを実践する開発プロジェクトの事例 / Examples of developm...

脱軽量DDDを実践する開発プロジェクトの事例 / Examples of development projects that practice de-lightweight DDD

Yappli Tech Conference 2023 登壇資料

connpass:
https://yappli.connpass.com/event/295001/

セッション動画(YouTube:)
https://youtu.be/DNTEAaQ-_ys?si=GDvj_x9GagVwKMJS

Yappli Developers

December 04, 2024
Tweet

More Decks by Yappli Developers

Other Decks in Programming

Transcript

  1. Speaker プロダクト開発本部 サーバーグループ 窪 田 修 Kubota Shu キャリアスタートはReact, React

    Native。ヤプリに 2022年5 月 にサーバーサイドエンジニアとして 入 社。 特に、DDD、hooks設計、Redux設計が好き。ヤプリ では主にGo, PHPでのサーバーサイドアプリケーショ ンの設計, 開発を担当。 一 部インフラの整備、Webフ ロントエンドの開発もたまにする。業務ではAWSがほ とんどだったが、最近Google Cloudの資格をとって Google Cloudにハマりつつある。
  2. 01 なぜDDDで設計したのか 今 日 の話の前提知識 • エリック ・ エヴァンスのドメイン駆動設計 •

    実践ドメイン駆動設計 • ドメイン駆動設計モデリング/実装ガイド • ドメイン駆動設計 入門
  3. 軽量DDDとは • DDDの 一 部のみの考え 方 を取り 入 れたアプローチ •

    コンテキストの境界の定義を省略するパターンが多い • ドメイン知識のコード上での表現が達成できない 0 2 DDDで設計する上での課題 軽量DDD = 技術的パターンのつまみ 食 い
  4. 軽量DDDあるある • entity, repository, useCase, serviceを作って満 足 する • ドメインエキスパートはいない

    • モデルはエンジニアの裁量で作る • コンテキストの境界が定義されていない • 集約の定義がなんとなくになる 0 2 DDDで設計する上での課題
  5. 軽量DDDの 欠 点 最 大 の 欠 点は 「知識をコード上で表現する」を実現できないこと =

    複雑な仕様を表現できない = メンテナンス性の 高 いスケールするシステム設計ができない 0 2 DDDで設計する上での課題
  6. 軽量DDDの 欠 点 最 大 の 欠 点は 「知識をコード上で表現する」を実現できないこと =

    複雑な仕様を表現できない = メンテナンス性の 高 いスケールするシステム設計ができない 0 2 DDDで設計する上での課題 →YappliͷߴػೳCMSͷෳࡶੑͷ௿ݮʹߩݙ͢ΔҰ൪ͷDDDͷ௕ॴ͕ੜ͔͖͠Εͳ͍
  7. 軽量DDDの 欠 点が露呈する例1: DB = entity ほぼDBモデル = entityになる 現実世界に存在しない概念がentityとして存在。

    エンジニアだけでモデリングするとやりがち。 ただ記述量が増えるだけ。 0 2 DDDで設計する上での課題 →ԾʹDBϞσϧ=entity͕࠷దͳΒ͹ɺDDD͸࠾༻͠ͳ͍ํ͕ྑ͍
  8. エンジニアの性質も ・・・ ? 技術指向の開発者は、 自 分の専 門 スキルを発揮できる、定量化可 能な問題を楽しむものだ。ドメインに関する作業は 面

    倒な上に、 入 り組んだ新しい知識を 大 量に必要とするが、そうした知識は開 発者にとって、コンピュータ科学者としての能 力 を向上させるも のではないように 見 えるのだ。(ドメイン駆動設計 第1部より) →ΤϯδχΞ͸ఆྔԽͰ͖Δ໰୊=ମܥԽ͞ΕධՁՄೳͳ໰୊͕޷͖ →ٯʹɺυϝΠϯϞσϦϯάͷΑ͏ͳ౴͕͑ग़ͤͳ͍ →݁ՌɺઓུతDDD͸ஔ͖ڈΓʹ͞ΕɺܰྔDDDʹؕΔ 03 軽量DDDになる要因
  9. 演繹的アプローチ vs 帰納的アプローチ • 演繹的アプローチ 体系化された知識を当てはめて設計していく • 帰納的アプローチ 事例をいくつか作って、後に知識を体系化していく 04

    脱軽量DDDのアプローチ →ؼೲతʹΞϓϩʔν͢Δͷ͕ྑͦ͞͏ɻίϛϡχέʔγϣϯɺϞσϦϯά౳ͷ౴͕͑ͳ͍໰୊ ʹରͯ͠͸ɺෳ਺ࣄྫ͔ΒYappliಠࣗͷମܥԽ͞Εͨ஌ࣝΛ࡞͍͚ͬͯ͹ྑ͍ͱ͍͏ൃ૝ɻ
  10. PJ構成メンバーのイメージ • ディレクター • デザイナー2 人 • フロントエンジニア1 人 •

    サーバーサイドエンジニア3 人 • QAエンジニア、SREも関わる 0 5 PJの事例
  11. ユビキタス 言 語の定義 06 実践モデリング • PJチーム内で 言 葉の定義をした •

    仕様策定と同時に 行 った • Figma上で議論した • 最終的には仕様書に落とされた
  12. ユビキタス 言 語の定義 • PJチーム内で 言 葉の定義をした • 仕様策定と同時に 行

    った • Figma上で議論した • 最終的には仕様書に落とされた υϝΠϯΤΩεύʔτ + ΤϯδχΞͰݴ༿Λἧ͑Δ͚ͩͰɺ ίϯςΩετͷڥք͸ܾ·Δɻ 06 実践モデリング
  13. まとめ • Yappliのドメイン知識は深く、DDDを採 用 した • 一方 で、DDDの良いところを 生 かしきれていない課題もあった

    • まずPJ事例を作ることで脱軽量DDDを 目 指した • ユビキタス 言 語定義、ドメインモデリング、実装までの 一 連の フローを実現できた 08 まとめ
  14. 重要度: 高 , 緊急度: 低 への意識 重要だが緊急度が低いと着 手 されないことが多い。 ヤプリの開発組織では左上領域を

    大 切にする 文 化がある。 →結果的に戦略的DDDに真正 面 から取り組むことができた。 08 まとめ