現場で役立つシステム設計の原則(ゲンバ デ ヤクダツ システム セッケイ ノ ゲンソク)
変更を楽で安全にするオブジェクト指向の実践技法
プログラミング- 著者:
- 増田亨(マスダ,トオル)
- 出版社:
- 技術評論社
- 出版日:
- 2017年07月
- ISBN:
- 9784774190877
- 価格:
- ¥3,234
- 在庫:
- 1
- 判型:
- 単行本
なぜ注目されているか
書籍紹介
日本最大級となる 60 万件以上の求人情報サイト「イーキャリア JobSearch 」の主任設計者ほか数多くの経験を持つ著者が「現場でこんなことに困っていた」「解決策としてこうやった」「その結果こうなった」というリアルな経験と「なぜ、そうするのか」をふまえて解説!
技書の森解説
「動くコード」は書けるようになった。しかし機能追加のたびに既存コードが壊れ、修正の影響範囲が読めず、変更が怖くなっていく。本書はこの構造的な苦しみを「設計の不在」として捉え、オブジェクト指向とドメイン駆動設計 (DDD) の考え方を武器に、変更を楽で安全にする実践技法を示した名著です。著者の増田亨氏は長年にわたり業務システムの設計に携わり、その経験から蒸留された原則を Java のコード例とともに解説しています。
本書が一貫して説くのは「業務の関心事をそのままコードの構造に写し取る」という姿勢です。値オブジェクト、区分オブジェクト、コレクションオブジェクトといった具体的なパターンを通じて、 if 文の増殖を防ぎ、ロジックの置き場所を明確にし、名前がそのまま仕様になるコードを書く方法が示されます。エリック・エヴァンスの DDD 本が抽象的で難しいと感じた人にとって、日本語で書かれた実装寄りの解説として入り口になります。
言語は Java ですが、原則自体は言語に依存しません。 TypeScript や C# のプロジェクトでもそのまま適用できます。設計書を書く人ではなく「コードで設計する人」に向けた本であり、読後に自分のリポジトリを見直すと改善点が次々と見えてくる、そういう類の読書体験を与えてくれます。
言及 Qiita 記事 (90 件)
[初心者向け]破滅的なクソコードを書かないために意識したい3つのこと
♡ 517C#, 初心者, 設計, コーディング規約, 初心者向け可読性の高いコードを書くための実践ガイド
♡ 456Python, リーダブルコード, コードの書き方オブジェクト指向プログラミングとドメイン駆動設計を学ぶのに適切な書籍とおすすめの読む順番
♡ 358オブジェクト指向, DDD, ドメイン駆動設計, 新人プログラマ応援, オブジェクト指向プログラミング『動けば別に良くない?』と言っていた二年前の自分にシステム設計の話をしてみる
♡ 321初心者, システム設計, 未経験エンジニア, 新人プログラマ応援ドメイン駆動設計を参考にしながらJava×SpringBootで家計管理アプリを自作
♡ 146Java, 初心者, DDD, SpringBootインフラエンジニア1年生がプログラミングを勉強するのに使った教材
♡ 130Python, JavaScript, AWS, 初心者, インフラ入門Javaのenum
♡ 86Java「現場で役立つシステム設計の原則」を読んだので、その要点
♡ 73読書, 設計, QiitaEngineerFesta20222022年前半読んだ本のおすすめをまとめるので皆読んでほしい
♡ 72読書, QiitaEngineerFesta2022ドメイン駆動設計を学びたい人にお勧めする書籍 + Twitter アカウント + α
♡ 63オブジェクト指向, DDD
この本に興味がある方におすすめ
この本に関連
関連記事
ソフトウェア開発の歴史を変えた 5 冊の技術書
アルゴリズムの学問化からコードの可読性革命まで、ソフトウェア開発の方向性を決定づけた 5 冊の技術書を、時代背景とエピソードとともに紹介します。
写経を超える - 技術書のコードを自分のプロジェクトに応用する方法
技術書のサンプルコードを写経するだけでは実力は伸びません。書籍のコードを自分のプロジェクトに応用し、実務で使える力に変える 5 つのステップを解説します。
コードを書かない日に読む本
休日や有給休暇など、コードを書かない日にこそ読むべき本があります。実装から離れた日に読むと効果が高い本のジャンルと、その理由を解説します。
関連用語
エンティティと値オブジェクト
DDD における 2 つの基本的なドメインモデル要素 - 同一性で区別するエンティティと、値で区別する値オブジェクト
オブジェクト指向
データと操作をオブジェクトとしてまとめ、現実の概念に近づけて設計する考え方
ドメイン駆動設計 (DDD)
ビジネスドメインの知識を中心に据え、ドメインエキスパートと開発者が共通言語で協働しながらソフトウェアを設計する手法
Flyweight パターン
多数のオブジェクト間で共有可能な状態を分離し、メモリ使用量を削減するデザインパターン
Builder パターン
複雑なオブジェクトの生成をメソッドチェーンで段階的に構築するデザインパターン
集約
ドメイン駆動設計において、一貫性を保つべきオブジェクト群をまとめ、単一のルートエンティティ経由でアクセスする設計パターン