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
15k
軽量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
200
学習を成果に繋げるための個人開発の考え方 〜 「学習のための個人開発」のすすめ / personal project for leaning
panda_program
1
160
「次に何を学べばいいか分からない」あなたへ──若手エンジニアのための学習地図
panda_program
3
880
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
5
3.2k
TypeScriptで実践するクリーンアーキテクチャ ― WebからもCLIからも使えるアプリ設計 / CClean Architecture with Typescript Application
panda_program
16
11k
モジュラーモノリスでスケーラブルなシステムを作る - BASE のリアーキテクチャのいま
panda_program
10
5.8k
バックエンドエンジニアのためのフロントエンド入門 #devsumiC
panda_program
21
15k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
118
20k
共通コンポーネントのテスト実装方法にあえてVRTを選択した話 / why do we choose VRT for testing shared components
panda_program
8
3.5k
Other Decks in Technology
See All in Technology
エンジニア採用と 技術広報の取り組みと注力点/techpr1112
nishiuma
0
140
AIと共に開発する時代の組織、プロセス設計 freeeでの実践から見えてきたこと
freee
3
700
QAを"自動化する"ことの本質
kshino
1
120
JAWS-UG SRE支部 #14 LT
okaru
0
100
AIと自動化がもたらす業務効率化の実例: 反社チェック等の調査・業務プロセス自動化
enpipi
0
520
CodexでもAgent Skillsを使いたい
gotalab555
9
4.7k
「O(n log(n))のパフォーマンス」の意味がわかるようになろう
dhirabayashi
0
140
探求の技術
azukiazusa1
7
2.1k
Flutterで実装する実践的な攻撃対策とセキュリティ向上
fujikinaga
2
410
LINE公式アカウントの技術スタックと開発の裏側
lycorptech_jp
PRO
0
380
CDKの魔法を少し解いてみる ― synth・build・diffで覗くIaCの裏側 ―
takahumi27
1
150
Javaコミュニティの歩き方 ~参加から貢献まで、すべて教えます~
tabatad
0
120
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Context Engineering - Making Every Token Count
addyosmani
9
380
Typedesign – Prime Four
hannesfritz
42
2.9k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
670
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
Speed Design
sergeychernyshev
32
1.2k
The World Runs on Bad Software
bkeepers
PRO
72
12k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Side Projects
sachag
455
43k
Producing Creativity
orderedlist
PRO
348
40k
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. スタイルガイド本のすすめ ご清聴ありがとう ございました