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
学習を成果に繋げるための個人開発の考え方 〜 「学習のための個人開発」のすすめ / personal project for leaning
panda_program
1
110
「次に何を学べばいいか分からない」あなたへ──若手エンジニアのための学習地図
panda_program
3
760
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
6
2.8k
TypeScriptで実践するクリーンアーキテクチャ ― WebからもCLIからも使えるアプリ設計 / CClean Architecture with Typescript Application
panda_program
15
9.9k
モジュラーモノリスでスケーラブルなシステムを作る - BASE のリアーキテクチャのいま
panda_program
10
4.6k
バックエンドエンジニアのためのフロントエンド入門 #devsumiC
panda_program
21
14k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
110
20k
共通コンポーネントのテスト実装方法にあえてVRTを選択した話 / why do we choose VRT for testing shared components
panda_program
8
3.4k
実践!ユニットテスト入門(PHPカンファレンス2022)
panda_program
14
10k
Other Decks in Technology
See All in Technology
Product Management Conference -AI時代に進化するPdM-
kojima111
0
210
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
8.6k
EKS Pod Identity における推移的な session tags
z63d
1
200
ドキュメントはAIの味方!スタートアップのアジャイルを加速するADR
kawauso
3
220
広島銀行におけるAWS活用の取り組みについて
masakimori
0
120
知られざるprops命名の慣習 アクション編
uhyo
10
2.3k
人と組織に偏重したEMへのアンチテーゼ──なぜ、EMに設計力が必要なのか/An antithesis to the overemphasis of people and organizations in EM
dskst
4
520
ZOZOTOWNフロントエンドにおけるディレクトリの分割戦略
zozotech
PRO
15
5k
Yahoo!ニュースにおけるソフトウェア開発
lycorptech_jp
PRO
0
300
ウォンテッドリーのアラート設計と Datadog 移行での知見
donkomura
0
300
メルカリIBIS:AIが拓く次世代インシデント対応
0gm
2
520
Yahoo!広告ビジネス基盤におけるバックエンド開発
lycorptech_jp
PRO
1
260
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
For a Future-Friendly Web
brad_frost
179
9.9k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Optimizing for Happiness
mojombo
379
70k
Facilitating Awesome Meetings
lara
55
6.5k
Designing for humans not robots
tammielis
253
25k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
BBQ
matthewcrist
89
9.8k
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. スタイルガイド本のすすめ ご清聴ありがとう ございました