Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
軽量DDDはもういらない! スタイルガイド本で OOPの実装パターンを学ぼう
Search
panda_program
November 06, 2024
Technology
32
16k
軽量DDDはもういらない! スタイルガイド本で OOPの実装パターンを学ぼう
DDDからOOPのプラクティスを学ぶのではなく、OOPのベストプラクティスをスタイルガイド本で学んでDDDに活かそう
panda_program
November 06, 2024
Tweet
Share
More Decks by panda_program
See All by panda_program
問題の見方を変える「システム思考」超入門
panda_program
0
370
学習を成果に繋げるための個人開発の考え方 〜 「学習のための個人開発」のすすめ / personal project for leaning
panda_program
2
190
「次に何を学べばいいか分からない」あなたへ──若手エンジニアのための学習地図
panda_program
3
940
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
5
3.4k
TypeScriptで実践するクリーンアーキテクチャ ― WebからもCLIからも使えるアプリ設計 / CClean Architecture with Typescript Application
panda_program
17
12k
モジュラーモノリスでスケーラブルなシステムを作る - BASE のリアーキテクチャのいま
panda_program
11
6.7k
バックエンドエンジニアのためのフロントエンド入門 #devsumiC
panda_program
21
15k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
共通コンポーネントのテスト実装方法にあえてVRTを選択した話 / why do we choose VRT for testing shared components
panda_program
8
3.5k
Other Decks in Technology
See All in Technology
Authlete で実装する MCP OAuth 認可サーバー #CIMD の実装を添えて
watahani
0
430
Agentic AIが変革するAWSの開発・運用・セキュリティ ~Frontier Agentsを試してみた~ / Agentic AI transforms AWS development, operations, and security I tried Frontier Agents
yuj1osm
0
210
CQRS/ESになぜアクターモデルが必要なのか
j5ik2o
0
720
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
AI with TiDD
shiraji
1
340
2025年の医用画像AI/AI×medical_imaging_in_2025_generated_by_AI
tdys13
0
320
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1k
形式手法特論:コンパイラの「正しさ」は証明できるか? #burikaigi / BuriKaigi 2026
ytaka23
16
4.6k
Oracle Cloud Infrastructure:2025年12月度サービス・アップデート
oracle4engineer
PRO
0
200
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
1
840
Next.js 16の新機能 Cache Components について
sutetotanuki
0
220
BidiAgent と Nova 2 Sonic から考える音声 AI について
yama3133
2
150
Featured
See All Featured
Music & Morning Musume
bryan
46
7k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
87
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
100k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
82
How STYLIGHT went responsive
nonsquared
100
6k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
720
Transcript
1 © 2012-2024 BASE, Inc. 4社に聞く、いつの間にかできていたドメイン駆動設計 @ROSCAFE プログラミングをするパンダ(@Panda_Program)(2024/11/07) 軽量DDDはもういらない! スタイルガイド本で
OOPの実装パターンを学ぼう
2 © 2012-2024 BASE, Inc. 自己紹介 • BASE株式会社 • 所属:BASE
/ Product Dev / feature dev1 • 現在のお仕事:シニアエンジニア ◦ フロントエンドもバックエンドも書きます(フルスタックです) ◦ スクラム開発やチームの開発プロセスの改善が得意です ◦ 今は新規機能の開発を開発してます • 好きなことと活動 ◦ DevOps とアジャイルの開発プロセス(XP、スクラム)が好き ◦ CodeZine様でたまに記事を連載してます ◦ 「ソフトウェア開発における自動テストの位置付けを考察する」など ◦ Software Design 2022年3月号で TDD 特集の2,3部を執筆しました ◦ twitter: @Panda_Program プログラミングをするパンダ(@Panda_Program)
3 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 目的 「強い人」じゃない 僕たちでも、チームで 実装に悩まないために
すごくいい本を紹介したい
4 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 軽量DDDが批判される理由 1 スタイルガイド本の紹介 2
5 © 2012-2024 BASE, Inc. 軽量DDDが批判される理由
6 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ https://x.com/Panda_Program/status/1537298024816590849
7 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ DDD Reference による DDD
の整理 • “Model-Driven Design”が中心にある • 上部は実装パターン(戦術) • 下部はアーキテクチャとモデリング(戦 略) 軽量DDDは、DDDの本質でもある下部を軽 視して上部のOOPの実装パターン集を導入 するだけ エヴァンスの「エンジニアもビジネスに目 を向けよ」というメッセージが希薄化する から、軽量DDDは批判される 軽量DDDとは? https://www.domainlanguage.com/ddd/reference/ を元に改変 戦略 戦術
8 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 「DDDの正体は実装パターンとモデリングの組み合わせ」 https://panda-program.com/posts/what-is-ddd 実装パターン •
Entity • Value Object • Service • Domain Event • Repository • Aggregate • Factory • Layered Architecture
9 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 軽量DDDとは、 OOPのプラクティスを DDDから学ぶこと
10 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 定番の本
11 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ そもそも OOPのプラクティスをDDDから 学ばななくてもいいのでは?
12 © 2012-2024 BASE, Inc. 自学自習でOOPを学ぶために良い本はたくさんある。 • エンタープライズアプリケーションアーキテクチャパターン(PoEAA) ◦ 体系的だが、コード例が古い
• GoFのデザインパターン ◦ パターンが使える場所が限定的 • OOPを理解するためにいい本はある ◦ 『現場で役立つシステム設計の原則』 ◦ 『良いコード/悪いコードで学ぶ設計入門』 ◦ 『オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方』 ◦ etc. • DDDを理解するためにいい本はある ◦ 『ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本』 ◦ 『ドメイン駆動設計 モデリング/実装ガイド』『ドメイン駆動設計 サンプルコード&FAQ』 ◦ etc. • 有名OSSとか登壇資料とか記事とか ◦ 体系的ではない 『なぜオブジェクト指向で作るのか』なども含めてその他たくさん スタイルガイド本のすすめ
13 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 読書会の隠れた課題 読書会をしても、理解度に差がある = チームで開発するときに実践できる人・できない人が生まれてしまう
ex.「本に書いてあることはわかったが、実務で活用するイメージが湧かない」 (過去の勉強会で実際に聞いた言葉) 「理解すること」と「実践すること」に実はギャップがある。 つまり、 「スキル差があるメンバーと共にチームで学習する」ためには帯に短し襷に 長しだった
14 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 再び目的 「強い人」じゃない 僕たちでも、チームで 実装に悩まないために
すごくいい本を紹介したい
15 © 2012-2024 BASE, Inc. スタイルガイド本の紹介
16 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ OOPでうまく実装するためのスタイル集 • 特徴 ◦
DDDの言葉を使わず、パターン集として完 成度が高い ▪ ex.「ドメインモデル貧血症」を what/why badだけで説明 • わかりやすさ ◦ 説明が過不足なく、読みやすい ▪ 「この時はこう書く」と具体的 • = 頭に入りやすく、実践しやすい ◦ bad code → good code のリファクタリン グの形式で書かれている • コーディングスタイルである ◦ コーディングスタイルなのでチームで「採 用する」「採用しない」を決められる ▪ チーム内で読書会をした時に、ここが一 番評判が良かった オブジェクト設計スタイルガイド | Matthias Noback, 田中 裕一
17 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ • オブジェクトに対する明快な視点 ◦ オブジェクトを「サービス」と「それ以
外」に分類 ▪ 「それ以外」のオブジェクトは、 Entity, Value Object, DTO のみ ▪ こう言い切るところが画期的 ◦ サンプルコードは疑似コードなので、どの 言語の方でもOK • カバー範囲が広い+DDDと相性が良い ◦ 自然とSOLID原則が身につく ◦ 自然と”Always-Valid Domain Model”が書 ける ◦ 自然とCQS、CQRSが身につく ▪ モックとスタブの区別も身につく ◦ 自然とクリーンアーキテクチャも身につく ◦ ドメインイベント・イベントリスナーを活 用した実装も紹介 オブジェクト設計スタイルガイド | Matthias Noback, 田中 裕一
18 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 『実践ドメイン駆動設計』の全14章のう ち、以下の7つの章をある程度skipできる (もちろん完全な代替ではないが) •
第5章「エンティティ」 • 第6章「値オブジェクト」 • 第7章「サービス」 • 第8章「ドメインイベント」 • 第9章「モジュール」 • 第11章「ファクトリ」 • 第12章「リポジトリ」 つまり「スタイルガイド本」を読んだ後は 戦略パートに集中できる! ただし、以下のことは書かれていないのでご注意 • 集約 • ドメインサービスとアプリケーションサービスの違い オブジェクト設計スタイルガイド | Matthias Noback, 田中 裕一
19 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ チームで導入したスタイルの例(色をつけたのはDDD風のもの) • 2章 サービスの作成
◦ 2.3 サービスロケータを注入する のではなく、必要なもの自体を注入 する ◦ 2.10 コンストラクタの中ではプロ パティへの代入以外は何もしない • 3章 ほかのオブジェクトの作成 ◦ 3.5 ドメイン不変条件が複数の場 所で検証されるのを防ぐために新し いオブジェクトを抽出する = Value Object を作ろう ◦ 3.9 名前付きコンストラクタを使 う ◦ 3.9.3 ドメイン固有の概念の導入 = 名前付きコンストラクタには Order.place() といったドメインの 単語を使おう • 4章 オブジェクトの操作 ◦ 4.5 イミュータブルオブジェク トのモディファイアメソッドで は変更されたコピーを返す = VOの値の変更はVOを再生 成しよう ◦ 4.6 ミュータブルオブジェクト ではモディファイアメソッドは コマンドメソッドとする ◦ 4.12 内部で記録されたイベン トを使用してミュータブルオブ ジェクトの変更を検証する = ドメインイベントを使おう • 7章 タスクの実行 ◦ 7.2 コマンドメソッドでやるこ とを限定し、イベントを使用し て二次的なタスクを実行する = イベントリスナーを使おう
20 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 図がわかりやすい アプリケーションの全体像を描いて くれている(左図) どのレイヤーに何が入るのかが明確
(下図)
21 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 『リーダブルコード』の次に 取り組むべき書籍 (中級者以上の方にとっても「おさらい」になる)
22 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ チームみんなのOOPの 理解度を統一できます (コードレビューのコストも大幅減 =
「綺麗な書き方」ではなく 何を実現すべきかに議論を集中できる)
23 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ DDDを適用するところにも 適用しないところにも 使えるコーディングスタイル
24 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 実装方法の瑣末な議論 (=軽量DDD)は 終わりにして、 DDDの戦略部分に
集中していこう
25 © 2012-2024 BASE, Inc. 宣伝 YouTubeでエンジニア向けのラジオを配信してます https://www.youtube.com/@dialog-radio/videos • 毎週月曜日の朝7時配信
• ブログ記事や登壇内容 になりにくいけれど、 重要なテーマで話して ます ◦ エンジニアはなぜビジ ネスを学べと言われ る? ◦ 本当のユーザー価値と は? ◦ 勉強会はスキルアップ 以外にも役にたつ • ぜひご視聴 & チャンネ ル登録お願いします!
26 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ ご清聴ありがとう ございました