Slide 1

Slide 1 text

1 © 2012-2024 BASE, Inc. 4社に聞く、いつの間にかできていたドメイン駆動設計 @ROSCAFE プログラミングをするパンダ(@Panda_Program)(2024/11/07) 軽量DDDはもういらない! スタイルガイド本で OOPの実装パターンを学ぼう

Slide 2

Slide 2 text

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)

Slide 3

Slide 3 text

3 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 目的 「強い人」じゃない 僕たちでも、チームで 実装に悩まないために すごくいい本を紹介したい

Slide 4

Slide 4 text

4 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 軽量DDDが批判される理由 1 スタイルガイド本の紹介 2

Slide 5

Slide 5 text

5 © 2012-2024 BASE, Inc. 軽量DDDが批判される理由

Slide 6

Slide 6 text

6 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ https://x.com/Panda_Program/status/1537298024816590849

Slide 7

Slide 7 text

7 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ DDD Reference による DDD の整理 ● “Model-Driven Design”が中心にある ● 上部は実装パターン(戦術) ● 下部はアーキテクチャとモデリング(戦 略) 軽量DDDは、DDDの本質でもある下部を軽 視して上部のOOPの実装パターン集を導入 するだけ エヴァンスの「エンジニアもビジネスに目 を向けよ」というメッセージが希薄化する から、軽量DDDは批判される 軽量DDDとは? https://www.domainlanguage.com/ddd/reference/ を元に改変 戦略 戦術

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

9 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 軽量DDDとは、 OOPのプラクティスを DDDから学ぶこと

Slide 10

Slide 10 text

10 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 定番の本

Slide 11

Slide 11 text

11 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ そもそも OOPのプラクティスをDDDから 学ばななくてもいいのでは?

Slide 12

Slide 12 text

12 © 2012-2024 BASE, Inc. 自学自習でOOPを学ぶために良い本はたくさんある。 ● エンタープライズアプリケーションアーキテクチャパターン(PoEAA) ○ 体系的だが、コード例が古い ● GoFのデザインパターン ○ パターンが使える場所が限定的 ● OOPを理解するためにいい本はある ○ 『現場で役立つシステム設計の原則』
 ○ 『良いコード/悪いコードで学ぶ設計入門』
 ○ 『オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方』
 ○ etc.
 ● DDDを理解するためにいい本はある ○ 『ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本』
 ○ 『ドメイン駆動設計 モデリング/実装ガイド』『ドメイン駆動設計 サンプルコード&FAQ』 ○ etc. ● 有名OSSとか登壇資料とか記事とか ○ 体系的ではない 『なぜオブジェクト指向で作るのか』なども含めてその他たくさん スタイルガイド本のすすめ

Slide 13

Slide 13 text

13 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 読書会の隠れた課題 読書会をしても、理解度に差がある = チームで開発するときに実践できる人・できない人が生まれてしまう ex.「本に書いてあることはわかったが、実務で活用するイメージが湧かない」 (過去の勉強会で実際に聞いた言葉) 「理解すること」と「実践すること」に実はギャップがある。 つまり、 「スキル差があるメンバーと共にチームで学習する」ためには帯に短し襷に 長しだった

Slide 14

Slide 14 text

14 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 再び目的 「強い人」じゃない 僕たちでも、チームで 実装に悩まないために すごくいい本を紹介したい

Slide 15

Slide 15 text

15 © 2012-2024 BASE, Inc. スタイルガイド本の紹介

Slide 16

Slide 16 text

16 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ OOPでうまく実装するためのスタイル集 ● 特徴 ○ DDDの言葉を使わず、パターン集として完 成度が高い ■ ex.「ドメインモデル貧血症」を what/why badだけで説明 ● わかりやすさ ○ 説明が過不足なく、読みやすい ■ 「この時はこう書く」と具体的 ● = 頭に入りやすく、実践しやすい ○ bad code → good code のリファクタリン グの形式で書かれている ● コーディングスタイルである ○ コーディングスタイルなのでチームで「採 用する」「採用しない」を決められる ■ チーム内で読書会をした時に、ここが一 番評判が良かった オブジェクト設計スタイルガイド | Matthias Noback, 田中 裕一

Slide 17

Slide 17 text

17 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ ● オブジェクトに対する明快な視点 ○ オブジェクトを「サービス」と「それ以 外」に分類 ■ 「それ以外」のオブジェクトは、 Entity, Value Object, DTO のみ ■ こう言い切るところが画期的 ○ サンプルコードは疑似コードなので、どの 言語の方でもOK ● カバー範囲が広い+DDDと相性が良い ○ 自然とSOLID原則が身につく ○ 自然と”Always-Valid Domain Model”が書 ける ○ 自然とCQS、CQRSが身につく ■ モックとスタブの区別も身につく ○ 自然とクリーンアーキテクチャも身につく ○ ドメインイベント・イベントリスナーを活 用した実装も紹介 オブジェクト設計スタイルガイド | Matthias Noback, 田中 裕一

Slide 18

Slide 18 text

18 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 『実践ドメイン駆動設計』の全14章のう ち、以下の7つの章をある程度skipできる (もちろん完全な代替ではないが) ● 第5章「エンティティ」 ● 第6章「値オブジェクト」 ● 第7章「サービス」 ● 第8章「ドメインイベント」 ● 第9章「モジュール」 ● 第11章「ファクトリ」 ● 第12章「リポジトリ」 つまり「スタイルガイド本」を読んだ後は 戦略パートに集中できる! ただし、以下のことは書かれていないのでご注意 ● 集約 ● ドメインサービスとアプリケーションサービスの違い オブジェクト設計スタイルガイド | Matthias Noback, 田中 裕一

Slide 19

Slide 19 text

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 コマンドメソッドでやるこ とを限定し、イベントを使用し て二次的なタスクを実行する = イベントリスナーを使おう

Slide 20

Slide 20 text

20 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 図がわかりやすい アプリケーションの全体像を描いて くれている(左図) どのレイヤーに何が入るのかが明確 (下図)

Slide 21

Slide 21 text

21 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 『リーダブルコード』の次に 取り組むべき書籍 (中級者以上の方にとっても「おさらい」になる)

Slide 22

Slide 22 text

22 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ チームみんなのOOPの 理解度を統一できます (コードレビューのコストも大幅減 = 「綺麗な書き方」ではなく 何を実現すべきかに議論を集中できる)

Slide 23

Slide 23 text

23 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ DDDを適用するところにも 適用しないところにも 使えるコーディングスタイル

Slide 24

Slide 24 text

24 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ 実装方法の瑣末な議論 (=軽量DDD)は 終わりにして、 DDDの戦略部分に 集中していこう

Slide 25

Slide 25 text

25 © 2012-2024 BASE, Inc. 宣伝 YouTubeでエンジニア向けのラジオを配信してます https://www.youtube.com/@dialog-radio/videos ● 毎週月曜日の朝7時配信 ● ブログ記事や登壇内容 になりにくいけれど、 重要なテーマで話して ます ○ エンジニアはなぜビジ ネスを学べと言われ る? ○ 本当のユーザー価値と は? ○ 勉強会はスキルアップ 以外にも役にたつ ● ぜひご視聴 & チャンネ ル登録お願いします!

Slide 26

Slide 26 text

26 © 2012-2024 BASE, Inc. スタイルガイド本のすすめ ご清聴ありがとう ございました