Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
軽量DDDはもういらない! スタイルガイド本で OOPの実装パターンを学ぼう
Search
panda_program
November 06, 2024
Technology
31
12k
軽量DDDはもういらない! スタイルガイド本で OOPの実装パターンを学ぼう
DDDからOOPのプラクティスを学ぶのではなく、OOPのベストプラクティスをスタイルガイド本で学んでDDDに活かそう
panda_program
November 06, 2024
Tweet
Share
More Decks by panda_program
See All by panda_program
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
94
17k
共通コンポーネントのテスト実装方法にあえてVRTを選択した話 / why do we choose VRT for testing shared components
panda_program
8
3k
実践!ユニットテスト入門(PHPカンファレンス2022)
panda_program
13
9.2k
実践! ユニットテスト入門
panda_program
12
7.6k
TypeScript Compiler API で Storybook を置換した話とその次の話
panda_program
5
2.7k
Signatories of the Manifesto for Agile Software Development
panda_program
0
360
Other Decks in Technology
See All in Technology
LY Accessibility Guidelines @fukuoka_a11yconf_前夜祭
lycorptech_jp
PRO
1
140
総会員数1,500万人のレストランWeb予約サービスにおけるRustの活用
kymmt90
3
2.8k
Atelier BlueHats : Migration de l’application COBOL MedocDB de GCOS à GnuCOBOL sur GNU/Linux
bluehats
0
110
深層学習のリペア技術の最新動向と実際 / DNN Repair Techniques for AI Performance Alignment for Safety Requirements
ishikawafyu
0
420
突き破って学ぶコンテナセキュリティ/container-breakout-cncj-lt
mochizuki875
6
1k
マルチプロダクト、マルチデータ基盤での Looker活用事例 〜BQじゃなくてもLookerはいいぞ〜
gappy50
0
130
PostgreSQL Conference Japan 2024 A4 Comparison of column-oriented access methods
nori_shinoda
0
120
農業用ダム監視を目的とした衛星SAR 干渉解析の適用性について
osgeojp
0
150
ONNX推論クレートの比較と実装奮闘記
emergent
0
290
[DevFestTokyo]Accelerating Flutter App Development Using Generative AI
korodroid
1
280
お悩みハンドブック紹介資料
grafferhandbook
0
820
AWS re:Invent 2024登壇資料(GBL206-JA: Unleashing the power of generative AI on AWS for your business)
minorun365
PRO
4
180
Featured
See All Featured
A Tale of Four Properties
chriscoyier
157
23k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
It's Worth the Effort
3n
183
27k
The Cult of Friendly URLs
andyhume
78
6.1k
Faster Mobile Websites
deanohume
305
30k
Done Done
chrislema
181
16k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
480
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
The Pragmatic Product Professional
lauravandoore
32
6.3k
A better future with KSS
kneath
238
17k
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. スタイルガイド本のすすめ ご清聴ありがとう ございました