ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本(成瀬 允宣)|翔泳社の本
  1. ホーム >
  2. 書籍 >
  3. ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本

ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本


形式:
書籍
発売日:
ISBN:
9784798150727
定価:
3,520(本体3,200円+税10%)
仕様:
A5・392ページ
カテゴリ:
プログラミング・開発
キーワード:
#プログラミング,#開発環境,#開発手法,#Web・アプリ開発
紙の書籍

学習しやすいパターンが満載!
ドメイン駆動設計をやさしく学べる入門書!

【本書の概要】
本書は、
『エリック・エヴァンスのドメイン駆動設計』(ISBN978-4-7981-2196-3、翔泳社)、
『実践ドメイン駆動設計』(ISBN978-4-7981-3161-0、翔泳社)
に感銘を受けた著者が贈る、ドメイン駆動設計の入門書です。

【対象読者】
『エリック・エヴァンスのドメイン駆動設計』や
『実践ドメイン駆動設計』をこれから読もうとしている方、
もしくはすでに読んだものの、「もう少しやさしい入門書も読みたい」
と感じているエンジニアの方を対象としています。

【本書の特徴】
ドメイン駆動設計において、実践が難しいものは後回しにして、
理解しやすい実装パターンからドメイン駆動設計の世界に
飛び込んでもらうことを目的としています。

そこで初心者にとって、理解しやすい、そして実践しやすいパターンからスタートできるよう、
解説を工夫しています。
またドメイン駆動設計で頻出するパターンの記述方法やその目的も併せて解説しています。

本書で解説するパターンは以下のとおりです。

【知識を表現するパターン】
・値オブジェクト
・エンティティ
・ドメインサービス

【アプリケーションを実現するためのパターン】
・リポジトリ
・アプリケーションサービス
・ファクトリ

【知識を表現する、より発展的なパターン】
・集約
・仕様

Chapter 1 ドメイン駆動設計とは
 1.1 ドメイン駆動設計とは何か
 1.2 ドメインの知識に焦点をあてた設計手法
 1.3 本書解説事項と目指すゴール
 COLUMN|ドメイン駆動設計の実践を難しくするもの
 1.4 本書で解説するパターンについて
 COLUMN|なぜいま、ドメイン駆動設計か

Chapter 2 システム固有の値を表現する「値オブジェクト」
 2.1 値オブジェクトとは
 2.2 値の性質と値オブジェクトの実装
 COLUMN|不変のメリット
 2.3 値オブジェクトにする基準
 2.4 ふるまいをもった値オブジェクト
 2.5 値オブジェクトを採用するモチベーション
 2.6 まとめ

Chapter 3 ライフサイクルのあるオブジェクト「エンティティ」
 3.1 エンティティとは
 3.2 エンティティの性質について
 COLUMN|セーフティネットとしての確認
 3.3 エンティティの判断基準としてのライフサイクルと連続性
 3.4 値オブジェクトとエンティティのどちらにもなりうるモデル
 3.5 ドメインオブジェクトを定義するメリット
 3.6 まとめ

Chapter 4 不自然さを解決する「ドメインサービス」
 4.1 サービスが指し示すもの
 4.2 ドメインサービスとは
 4.3 ドメインサービスの濫用が行き着く先
 4.4 エンティティや値オブジェクトと共にユースケースを組み立てる
 COLUMN|ドメインサービスの基準
 4.5 物流システムに見るドメインサービスの例
 COLUMN|ドメインサービスの命名規則
 4.6 まとめ

Chapter 5 データにまつわる処理を分離する「リポジトリ」
 5.1 リポジトリとは
 COLUMN|リポジトリはドメインオブジェクトを際立たせる
 5.2 リポジトリの責務
 5.3 リポジトリのインターフェース
 COLUMN|nullの是非とOption型
 5.4 SQLを利用したリポジトリを作成する
 5.5 テストによる確認
 5.6 テスト用のリポジトリを作成する
 5.7 オブジェクトリレーショナルマッパーを用いたリポジトリを作成する
 5.8 リポジトリに定義されるふるまい
 5.9 まとめ

Chapter 6 ユースケースを実現する「アプリケーションサービス」
 6.1 アプリケーションサービスとは
 COLUMN|アプリケーションサービスという名前
 6.2 ユースケースを組み立てる
 COLUMN|煩わしさを減らすために
 COLUMN|エラーかそれとも例外か
 6.3 ドメインのルールの流出
 6.4 アプリケーションサービスと凝集度
 6.5 アプリケーションサービスのインターフェース
 6.6 サービスとは何か
 6.7 まとめ

Chapter 7 柔軟性をもたらす依存関係のコントロール
 7.1 技術要素への依存がもたらすもの
 7.2 依存とは
 7.3 依存関係逆転の原則とは
 7.4 依存関係をコントロールする
 7.5 まとめ

Chapter 8 ソフトウェアシステムを組み立てる
 8.1 ソフトウェアに求められるユーザーインターフェース
 COLUMN|ソフトウェアとアプリケーションの使い分け
 8.2 コマンドラインインターフェースに組み込んでみよう
 COLUMN|シングルトンパターンと誤解
 8.3 MVCフレームワークに組み込んでみよう
 COLUMN|コントローラの責務
 8.4 ユニットテストを書こう
 8.5 まとめ
 COLUMN|本当に稀な怪談話

Chapter 9 複雑な生成処理を行う「ファクトリ」
 9.1 ファクトリの目的
 9.2 採番処理をファクトリに実装した例の確認
 COLUMN|ファクトリの存在に気づかせる
 9.3 ファクトリとして機能するメソッド
 9.4 複雑な生成処理をカプセル化しよう
 COLUMN|ドメイン設計を完成させるために必要な要素
 9.5 まとめ

Chapter 10 データの整合性を保つ
 10.1 整合性とは
 10.2 致命的な不具合を確認する
 10.3 ユニークキー制約による防衛
 10.4 トランザクションによる防衛
 COLUMN|結局どれを使うべきか
 10.5 まとめ

Chapter 11 アプリケーションを1から組み立てる
 11.1 アプリケーションを組み立てるフロー
 11.2 題材とする機能
 11.3 サークルの知識やルールをオブジェクトとして準備する
 11.4 ユースケースを組み立てる
 11.5 まとめ

Chapter 12 ドメインのルールを守る「集約」
 12.1 集約とは
 COLUMN|集約を保持するコレクションを図に表すか
 COLUMN|よりきめ細やかなアクセス修飾子(Scala)
 12.2 集約をどう区切るか
 COLUMN|IDのゲッターに対する是非
 12.3 集約の大きさと操作の単位
 COLUMN|結果整合性
 12.4 言葉との齟齬を消す
 12.5 まとめ

Chapter 13 複雑な条件を表現する「仕様」
 13.1 仕様とは
 13.2 仕様とリポジトリを組み合わせる
 COLUMN|遅延実行による最適化
 13.3 まとめ

Chapter 14 アーキテクチャ
 14.1 アーキテクチャの役目
 14.2 アーキテクチャの解説
 14.3 まとめ

Chapter 15 ドメイン駆動設計のとびらを開こう
 15.1 軽量DDDに陥らないために
 COLUMN|パターンの濫用とパターンを捨てるとき
 15.2 ドメインエキスパートとモデリングをする
 15.3 ユビキタス言語
 COLUMN|ユビキタス言語と日本語の問題
 15.4 境界付けられたコンテキスト
 15.5 コンテキストマップ
 15.6 ボトムアップドメイン駆動設計
 15.7 まとめ

Appendix ソリューション構成
 A.1 ソフトウェア開発の最初の一歩
 COLUMN|C#特有のプロジェクト管理用語
 A.2 ソリューション構成
 A.3 まとめ

付属データはこちら

会員特典はこちら

お問い合わせ

内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。

正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。

利用許諾に関するお問い合わせ

本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。

追加情報はありません。

ご購入いただいた書籍の種類を選択してください。

書籍の刷数を選択してください。

刷数は奥付(書籍の最終ページ)に記載されています。

現在表示されている正誤表の対象書籍

書籍の種類:

書籍の刷数:

本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。

対象の書籍は正誤表がありません。

最終更新日:2023年06月16日
発生刷 ページ数 書籍改訂刷 電子書籍訂正 内容 登録日
1刷 027
本文 上から3行目
2刷
これにより値オブジェクトは…
これにより値オブジェクトは…

※リフローEPUBの場合、第2章、リスト2.18のすぐ下にある段落が該当箇所になります。
2020.02.17
1刷 027
上から10行目
2刷
ミドルネームを表現するために、氏名を表現するFullNameクラスにバグはさまざまなことを起因として開発者を悩ませますが、属性が追加されたときのことを考えてみてください。
このミドルネームを表現するために、氏名を表現するFullNameクラスに新たな属性が追加されたときのことを考えてみてください。

※リフローEPUBの場合、第2章、リスト2.18の下にある見出し「属性が追加されても修正不要」のすぐ下にある段落が該当箇所になります。
2020.02.18
1刷 062
下から7-8行目
5刷
プログラムの随所に散らばったコードから変更すべき箇所をを探し出す必要があります。
プログラムの随所に散らばったコードから変更すべき箇所を探し出す必要があります。

※リフローEPUBの場合、第3章、図3.7のすぐ下にある段落が該当箇所になります。
2021.08.20
1刷 097
下から3~4行目
2刷
また、UserDomainServiceでも同様に…
また、UserServiceでも同様に…

※リフローEPUBの場合、第5章、リスト5.12のすぐ下にある段落が該当箇所になります。
2020.02.19
1刷 111
5.9 まとめ
2刷
(…略…)そしてもちろん、テストを実施したいときにテストができます。  ドメインのルールに比べると、(…略…)。
(…略…)そしてもちろん、テストを実施したいときにテストができます。  もちろん、不具合はデータストアを取り扱うモジュール上で発生したり、実行環境に依存して発生することもあります。そのため、最終的にはデータストアを絡めた実環境上でテストを実施することは不可欠です。その上で、テストを気軽に実施できるよう仕立てる努力は品質の向上に寄与するものに違いありません。
 ドメインのルールに比べると、(…略…)。

※リフローEPUBの場合、第5章の「5.9 まとめ」の3つ目から4つ目の段落が該当箇所になります。
2020.02.18
1刷 154
リスト6.38 1行目
2刷
public class MockUserRegisterService : IUserRegisterService
public class ExceptionUserRegisterService : IUserRegisterService
2020.02.19
1刷 166
図7.6 
2刷
2020.02.19
1刷 224
図10.1、図10.2
2刷
・図10.1 ボディ部の「合計」 ・図10.2 「合計」
・図10.1 ボディ部の「合計」 ・図10.2 「合計」
2020.02.25
1刷 257
リスト11.5の下の本文
3刷
またサークルはユーザ名が重複していないかを確認する必要があります。
またサークルはサークル名が重複していないかを確認する必要があります。
2020.03.24
1刷 279
リスト12.14 5行目
4刷
// 通知オブジェクトを引き渡しダブルディスパッチにより内部データを取得
// 通知オブジェクトを引き渡して内部データを取得
2021.06.17
1刷 300
「リスト13.7:サークルに所属するメンバーを表すファーストクラスコレクション」のコード
4刷

(画像クリックで拡大)

(画像クリックで拡大)

「this.owner = owner;」を追加します。
2020.08.17
1刷 305
リスト13.13の下の本文 下から3行目
4刷
メソッドを呼び出させる(ダブルディスパッチ)ことにより、
メソッドを呼び出させることにより、
2021.06.17
1刷 341
リスト14.8の上から4行目
public UserGetInteractor(IUserGetPresenter presenter) {
public StubUserGetInteractor(IUserGetPresenter presenter) {
2023.06.16
1刷 352
「15.3.1 深い洞察を得るために」内の4箇所
4刷
通訳
翻訳

※第15章、「15.3.1 深い洞察を得るために」の2つ目、3つ目、4つ目、7つ目の段落が該当箇所になります。
2021.06.17
1刷 366
COLUMN内(下から2行目)
3刷
Exlipseでは
Eclipseでは

※リフローEPUBの場合、付録の「A.1 ソフトウェア開発の最初の一歩」のコラム「C#特有のプロジェクト管理用語」が該当箇所になります。
2020.02.28

感想・レビュー

めかぶこんぶ さん

2020-03-05

☆一文要約:DDDは大きな概念だが、ボトムアップに軽量DDDからの導入でも、コードの改善につながる! ●要約:DDDをボトムアップで、一つ一つコードレベルの例ち共に解説。DDD本書より圧倒的に読みやすいので、最初の一歩には最適か。大きな概念としてのDDDを着実に自分のプロダクトに活かす方法が見えてくる。軽量DDD(パターンのみの適用)は本来目指すところではないものの、それだけでもコードの改善にはつながる。できるところからはじめて、将来的にドメイン駆動設計ができるようになるための第一歩になる一冊と感じた。

忘備録 さん

2021-07-12

エンティティ、バリューオブジェクト、ドメインサービス、アプリケーションサービスなど、DDDの基本となる概念の理解が出来た。これらの知識は本格的にDDDを学ぶ上での下地になる。

つるたん さん

2021-07-04

再読。DDDについてとてもわかり易く書かれており読んでいて気持ちよかった。 Value ObjectとEntityの違い、Specificationを使用し仕様を外部へ切り出す、抽象へ依存させることによる依存関係逆転の法則など役立つ知識が多い。しかしこれらの知識を実装へ落とし込むことがDDDではなく、ドメインを主軸において開発することの重要性を説いていた。