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

Python で学ぶ実践的なドメイン駆動設計とレイヤードアーキテクチャ / DDD and O...

Python で学ぶ実践的なドメイン駆動設計とレイヤードアーキテクチャ / DDD and Onion Architecture in Python

2021年10月に開催された PyCon JP 2021 Day 1 の登壇資料です。

CfP より抜粋

ドメイン駆動設計(DDD)やクリーンアーキテクチャといった話題は定期的に盛り上がりを見せますが、Pythonにおける実践的な解説はいまだ多くありません。このセッションでは、分かりやすく具体的なコード例を織り交ぜながら、これらについて解説を行います。聴衆は、他の言語の仕様や実例と比較したうえで、フラットな目線で Python で DDD に取り組むことの良い点と課題点を見つけることができるでしょう。

Takahiro Ikeuchi

October 16, 2021
Tweet

More Decks by Takahiro Ikeuchi

Other Decks in Technology

Transcript

  1. Takahiro Ikeuchi - 池内 孝啓 株式会社Hakali 取締役CTO • @iktakahiro •

    https://github.com/iktakahiro おしごと : メンタルウェルネス・アプリ Awarefy の事業 & 開発責任者 Python, Dart(Flutter), Go, TypeScript 2
  2. Agenda • 自己紹介 & Agenda - 2分 ← イマココ •

    コードアーキテクチャの前に - 2分 • コードアーキテクチャ編 - 20分 ◦ ドメイン層 / インフラ層 / ユースーケース層 • Advanced Topics 編 5分 ◦ CRQS / UoW / FastAPI • まとめ - 1分 4
  3. 用語の整理 • DDD ◦ ドメイン駆動設計。このセッションでは、某書籍 (エリック・エヴァン スのドメイン駆動設計) を前提に解説を進めます • レイヤード・アーテキクチャ

    ◦ このセッションでは、実質的に オニオン・アーキテクチャ を指す • ドメイン ◦ 事業やサービスが取り扱う世界のこと(用例: ドメイン知識 • ドメインオブジェクト ◦ ドメイン知識やビジネスロジックを持つクラス 6
  4. ドメイン層 • Entity • Value Object • Repository Interface ドメイン

    ユースケース プレゼンテーション(UI) インフラ テスト 24
  5. ドメイン層の構成要素 • Entity • Value Object • Domain Service ◦

    Repository Interface • First Class Collection など 25
  6. Entity と DTO を分ける意味 • インフラ層の関心事がドメイン層に流出しない ◦ ドメインオブジェクトが RDB の都合で変更されない

    • データスキーマ駆動設計への抑止力になる ◦ データベースではなく、ユーザーと対話しよう 49
  7. UoW とは • Unit of Works • トランザクションの単位を 明示的に 管理するためのパターン

    • 個人的には最難所 ◦ 難しく考えずにミドルウェアに任せていいかなと思っている... 66
  8. チームで1年やってみてどうか? 76 • Python, Dart (Flutter), Go, TypeScript (Next.js) でチーム実践

    • 共通認識を持ちやすい、レビューの観点を明確にできる • フレームワークは薄く、レイヤーは厚く な技術スタックを形成できる • 型は(強めに)あったほうがよい
  9. これから学ぶかたへ 80 • ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本 (2020, 翔泳社) • 「実践ドメイン駆動設計」から学ぶDDDの実装入門 (2007,

    翔泳社) • オブジェクト指向でなぜつくるのか 第3版(2021, 日経BP) • 現場で役立つシステム設計の原則(2017, 技術評論社) • ダイアグラム別 UML徹底活用 第2版(2011, 翔泳社)
  10. 81

  11. We’re Hiring!! • UI デザイナ(採用強化中!) • Web デザイナ • アプリ開発エンジニア(Python,

    Flutter, Go, TypeScript) • カスタマーサクセス https://hakali.co.jp/contact @iktakahiro 82