読書メモ
-nilog: ドメイン駆動設計入門をざっと読了。現場感覚の入門ができてわかりやすいのでとてもありがたい。 「ドメイン駆動設計において、実践が難しいものは後回しにして、理解しやすい実装パターンからドメイン駆動設計の世界に飛び込んでもらうことを目的としています」「初心者にとって、理解しやすい、そして実践しやすいパターンからスタートできるよう、解説を工夫しています。またドメイン駆動設計で頻出するパターンの記述方法やその目的も併せて解説しています」 ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本 eBook : 成瀬 允宣: Kindleストア (2024-08-23)
--http://www.nilab.info/nilog/?type=m01&id=113010879877143060
--

-知識を表現するパターン
--値オブジェクト: システム固有の値を表現する不変のオブジェクト
--エンティティ: ライフサイクルのあるオブジェクト
--ドメインサービス: エンティティの不自然なふるまいを肩代わりする
-アプリケーションを実現するためのパターン
--リポジトリ: データの永続化等を担当する
--アプリケーションサービス: ユースケースを実現する
--ファクトリ: 複雑な生成処理を担当
-知識を表現する発展的なパターン
--集約
--仕様
-集約
--データを変更するための単位として扱われるオブジェクトの集まり
--ルートとなるオブジェクトを通して操作する
--トランザクションやロックに関係する
-仕様
--あるオブジェクトがある評価基準に達しているかを判定するオブジェクト
-ユニットオブワーク
--オブジェクトの変更を記録するオブジェクト
--コミット処理が呼び出されると、そこまでの変更処理をデータストアに対して適用する
--永続化の対象となるオブジェクトの作成・変更・削除といった処理をすべてユニットオブワークを通じて行う
-依存関係をコントロールする
--Service Locator パターン
--IoC Container パターン
-アーキテクチャ
--レイヤードアーキテクチャ
--ヘキサゴナルアーキテクチャ
--クリーンアーキテクチャ
-レイヤードアーキテクチャ
--いくつかの層に分かれる
---プレゼンテーション層 (ユーザーインターフェース層)
---アプリケーション層
---ドメイン層
---インフラストラクチャ層
--ドメイン層に置くドメインオブジェクトが他の層へ流出しないようにする
--レイヤードアーキテクチャは層分けを言及しているに過ぎないので、インターフェースを取り扱うかどうかは任意
-ヘキサゴナルアーキテクチャ
--モチーフは六角形
--アプリケーションとそれ以外のインターフェースや保存媒体を付け外しできるようにする
--レイヤードアーキテクチャでインターフェースを利用して依存関係の逆転を達成するとヘキサゴナルアーキテクチャとほとんど同じ
-クリーンアーキテクチャ
--ビジネスルールをカプセル化したモジュールを中心に据えて、依存の方向を制御する
--ユーザインターフェースやデータストアなどの詳細を端に追いやり、依存の方向を内側に向けることで、詳細が抽象に依存するという依存関係逆転を達成
--クリーンアーキテクチャには、コンセプトを実現する具体的な実装方針が明示されている
書籍情報
-ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本(成瀬 允宣)|翔泳社の本
--https://www.shoeisha.co.jp/book/detail/9784798150727
-->目次
-->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 まとめ
-Amazon.co.jp: ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本 eBook : 成瀬 允宣: Kindleストア
--https://www.amazon.co.jp/dp/B082WXZVPC?tag=nilabwiki-22&linkCode=osi&th=1&psc=1
-->学習しやすいパターンが満載!
-->ドメイン駆動設計をやさしく学べる入門書!
-->
-->【本書の概要】
-->本書は、
-->『エリック・エヴァンスのドメイン駆動設計』(ISBN978-4-7981-2196-3、翔泳社)、
-->『実践ドメイン駆動設計』(ISBN978-4-7981-3161-0、翔泳社)
-->に感銘を受けた著者が贈る、ドメイン駆動設計の入門書です。
-->
-->【対象読者】
-->『エリック・エヴァンスのドメイン駆動設計』や
-->『実践ドメイン駆動設計』をこれから読もうとしている方、
-->もしくはすでに読んだものの、「もう少しやさしい入門書も読みたい」
-->と感じているエンジニアの方を対象としています。
-->
-->【本書の特徴】
-->ドメイン駆動設計において、実践が難しいものは後回しにして、
-->理解しやすい実装パターンからドメイン駆動設計の世界に
-->飛び込んでもらうことを目的としています。
-->
-->そこで初心者にとって、理解しやすい、そして実践しやすいパターンからスタートできるよう、
-->解説を工夫しています。
-->またドメイン駆動設計で頻出するパターンの記述方法やその目的も併せて解説しています。
-->
-->本書で解説するパターンは以下のとおりです。
-->
-->【知識を表現するパターン】
-->・値オブジェクト
-->・エンティティ
-->・ドメインサービス
-->
-->【アプリケーションを実現するためのパターン】
-->・リポジトリ
-->・アプリケーションサービス
-->・ファクトリ
-->
-->【知識を表現する、より発展的なパターン】
-->・集約
-->・仕様