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
31
11k
軽量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
93
16k
共通コンポーネントのテスト実装方法にあえてVRTを選択した話 / why do we choose VRT for testing shared components
panda_program
8
3k
実践!ユニットテスト入門(PHPカンファレンス2022)
panda_program
13
9.1k
実践! ユニットテスト入門
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
350
Other Decks in Technology
See All in Technology
Terraform未経験の御様に対してどの ように導⼊を進めていったか
tkikuchi
2
430
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
4
530
B2B SaaS × AI機能開発 〜テナント分離のパターン解説〜 / B2B SaaS x AI function development - Explanation of tenant separation pattern
oztick139
2
220
マルチモーダル / AI Agent / LLMOps 3つの技術トレンドで理解するLLMの今後の展望
hirosatogamo
37
12k
AGIについてChatGPTに聞いてみた
blueb
0
130
信頼性に挑む中で拡張できる・得られる1人のスキルセットとは?
ken5scal
2
530
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.3k
Terraform CI/CD パイプラインにおける AWS CodeCommit の代替手段
hiyanger
1
240
フルカイテン株式会社 採用資料
fullkaiten
0
40k
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
110
社内で最大の技術的負債のリファクタリングに取り組んだお話し
kidooonn
1
550
OCI Security サービス 概要
oracle4engineer
PRO
0
6.5k
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Building Applications with DynamoDB
mza
90
6.1k
Fireside Chat
paigeccino
34
3k
Music & Morning Musume
bryan
46
6.2k
Testing 201, or: Great Expectations
jmmastey
38
7.1k
GraphQLとの向き合い方2022年版
quramy
43
13k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Docker and Python
trallard
40
3.1k
Navigating Team Friction
lara
183
14k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
The Cost Of JavaScript in 2023
addyosmani
45
6.7k
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. スタイルガイド本のすすめ ご清聴ありがとう ございました