ISBN 9784797347784

アジャイルソフトウェア開発の奥義第2版 : オブジェクト指向開発の神髄と匠の技

アジャイルソフトウェア開発の奥義第2版 : オブジェクト指向開発の神髄と匠の技
刊行
2008-07

概要

SOLID原則とアジャイルプラクティスでOOP設計を体系化する

想定読者

OOP基礎を習得済みで、設計原則・アジャイル開発手法を実務レベルで体系的に身につけたい中級エンジニア

こんな人には向いていない

  • プログラミング自体が初めてで文法やクラスの概念をまだ習得中の完全初学者(前提知識なしでは抽象度が高すぎる)
  • SOLID原則を実務で日常的に適用済みで、戦略的DDDやヘキサゴナルアーキテクチャの深化を主目的としている上級者(本書の比重が原則の基礎説明寄りに感じられる)
  • スクラムやカンバンの具体的な運用改善を求めている人(本書のアジャイル論はXPとコーディングプラクティスが中心であり、プロセス管理フレームワークの詳述ではない)

この本で身につくこと

  • SRP・OCP・LSP・ISP・DIP の各原則が「どの設計判断でどう機能するか」を具体的なコード例とともに説明できる
  • 依存性逆転(DIP)を活用して外部依存をインターフェースに封じ込め、テスト可能なモジュール構造を実装できる
  • XP(エクストリームプログラミング)のプラクティス(TDD・リファクタリング・継続的インテグレーション)の目的と相互依存を理解し、日常の開発行動に結びつけられる
  • GoFデザインパターンを SOLID 原則と対応させ、「なぜこのパターンが変更に強いか」を原理から語れる
  • アジャイルマニフェストの12原則を具体的なコーディング・レビュー慣行に対応づけ、チームへの説明に使える

ハイライト(外部からの言及)

SOLID原則の説明が良かった記憶があります。その他にも示唆に富んでいたような記憶がありますが、読んだのがだいぶ前なのでどんな内容だったか忘れてしまいました(また読んでみます) — 出典

OOP→DDD の学習ロードマップで本書を5番目に配置した著者の率直な読書体験。「また読んでみます」の一言が、実務経験を積んだ後の再読価値を暗示しており、知識が熟成してから価値が増す書籍であることを示す

再度「アジャイルソフトウェア開発の奥義」からの引用だが、State Patternを使うことで、状態マシンのアクション部分と論理部分を強力に分離することができる(ロバート, 2004, p534) — 出典

Swift でお気に入りボタンを State Pattern 実装した記事が p534 を直接引用。本書のパターン解説が特定言語に依存せず現場コードに適用できることを、実装記事が出典として選ぶ形で実証している

S型のオブジェクトo1の各々に、対応するT型のオブジェクトo2が1つ存在し、Tを使って定義されたプログラムPに対してo2の代わりにo1を使ってもPの振る舞いが変わらない場合、SはTの派生型であると言える。 — 出典

LSP を深掘りする解説記事が本書のリスコフ置換原則の定義を一次ソースとして引用。原文の数学的厳密さが「難しくてよくわからない」と評されるほどであり、それが概念の正確な理解を求めるエンジニアが原典を参照し続ける理由となっている

読了後にできること

Before(読む前): SOLID 原則の名前は知っているが、コードレビューや設計議論でどの原則がどの問題に対処するのかを根拠立てて説明できない

After(読み終えた後): SRP・OCP・LSP の違いを具体的なコード例で説明でき、DIP を使って外部依存をインターフェースに封じ込めてテスト可能な設計を実装できる

章立て

第1章 アジャイル開発

第1部 アジャイル開発。アジャイルプラクティス・XP 概要・計画・テスト・リファクタリング・プログラミングエピソードを扱う

第2章 アジャイル設計

第2部 アジャイル設計。SOLID 原則の出発点となる本書の中核章

第3章 給与システムのケーススタディ

第3部 ケーススタディ。Command / Strategy / Facade / Singleton / Null Object 等のパターンを実装で示す

第4章 給与システムのパッケージング

第4部 パッケージ設計原則(REP / CCP / CRP / ADP / SDP / SAP)を体系化した章

第5章 気象観測所のケーススタディ

第5部 Composite / Observer / Adapter / Bridge / Proxy 等のパターン適用

第6章 ETSのケーススタディ

第6部 Visitor / State パターンとフレームワーク設計の総合演習

関連記事 / 参考情報

学習のヒント

  • SOLID 原則の各章(SRP → OCP → LSP → ISP → DIP の順)が本書の核心であり、複数の Qiita 記事がこの部分を出典として引用している。アジャイル開発の概論部分は後回しにして原則章を先に読んでも理解できる構成になっており、設計改善が急務な読者はそこから入るのが実用的
  • OOP → DDD のロードマップ上での本書の位置は「中間地点」。SOLID 原則と DIP を本書で固めてから DDD 本(エリック・エヴァンス等)に進むと、リポジトリパターンや境界づけられたコンテキストの依存関係議論が腑に落ちやすい。複数の記事がこの順序を推奨している
  • GoF パターン章は、特定言語の実装記事(Swift の State パターン、PHP の Singleton 等)が本書を出典として引用していることから、言語を問わず設計の動機を理解するための原典として有効。自分の主言語でコードを書き直しながら読むと定着が早い
  • 2008年出版のため、ビルドツールや CI 環境の具体的な記述は現在の開発環境と乖離している箇所がある。アジャイルプラクティスの「意図」を掴む読み方をし、具体的なツール選定は最新ドキュメントで補完するのが現実的

前提知識

  • クラス・継承・インターフェースを使ったオブジェクト指向コードを一度でも書いた経験
  • ユニットテストの概念(何を検証するのか)をなんとなく理解している
  • チームでのコードレビューやリファクタリングを経験しており、「なぜこの設計は変更に弱いのか」を考えたことがある

次に読む本

Clean Architecture

本書で SOLID 原則を習得した後、システム全体の依存関係をどう整理するかを Uncle Bob 自身が体系化した発展書。DIP の考え方がシステム境界の設計に拡張される

ドメイン駆動設計(エリック・エヴァンス)

複数の Qiita 記事が本書 → DDD という学習ロードマップを推奨。SOLID 原則と DIP を固めてから読むとリポジトリパターンや集約設計の議論が理解しやすい

リファクタリング 第2版(マーチン・ファウラー)

本書が SOLID 原則と XP プラクティスの理論・動機を体系化しているのに対し、『リファクタリング 第2版』は既存コードを安全に改善する具体的カタログを提供する。設計原則を「知っている」から「コードで実践できる」へ移行する段階で参照するのが読む順序として合理的

出版社による内容紹介

ソフトウェア開発の原則・デザインパターン・プラクティス完全統合。すべての悩めるプログラマのための処方箋。Software Development誌Jolt Award受賞作。

この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。

質問に答えるだけで、
あなたに合う専門書が見つかる

IT・デザイン・士業・医療・経理・教育・研究 ほか、あらゆる分野の専門書と 「読む順序」(学習ロードマップ)を収録。何を選べばいいか分からなくても、 いくつかの質問に答えるだけでたどり着けます。