ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本
を読んだ
マスタカと言えばみんなからDDと呼ばれる男
誰でも大好きってことや
そんなわけで本書を読んでみた
以下、内容
・本書の内容
DDDのエリックさんの本が辛いので入門書を作りましたという位置づけ
軽量DDDとしてボトムアップから始められるように書かれてる本
コードの例が多く出てるので実践向きの本で読みやすいです
以下ためになったこと
・モデル
モデルとは抽象化した概念
・モデリング
概念を抽象化する作業をモデリングと呼ぶ
結果としてモデルが得られる
ドメインの概念をモデリングして得られるのはドメインモデル
ex.ペンが小説家が使うものなら文字がかけることが重要
ex1.ペンが商品なら値段が重要
・ドメインオブジェクト
ドメインモデルをソフトウェアで動作するモジュールとして表現したものを
ドメインオブジェクト
・値オブジェクト
プリミティブ型は使わないほうが良いことも多い
システム固有の値を表したオブジェクトを値オブジェクト
・値オブジェクトにするかどうかの基準
ルールがあるか
それ単体で扱いたいか
姓名はルールもあるし単体で扱いたいケースはあるが
名前だけでも同じようになるかなって考えるらしい
・値オブジェクトを使うモチベーション
表現力を増す
不正な値を存在させない
誤った代入を防ぐ
ロジックの散財を防ぐ
・エンティティ
可変
同じ属性でも区別される
同一性により区別される
ex1.同じ姓名でも別人
ex2.ニックネームを変更しても同じ人
・エンティティにするか値オブジェクトにするか
ライフサイクルの存在
連続性が存在
ex.ユーザは生まれてから死ぬのでライフサイクルと連続性があるのでエンティティ
ex2.タイヤは車にとってはパーツなので値オブジェクト
ex3.タイヤメーカーにとってはロット番号があるのでエンティティ
・ドメインサービス
ドメインに書くと不自然なものを書く
ただし、ドメインサービスは薄くすること
・レポジトリの責務
オブジェクトの永続化
重複判定はドメインのルールに近いのでレポジトリではないかも
・凝縮度とは
すべてのメソッドが定義されてるすべてのフィールドを利用すると凝縮度が高い
メソッドが複数あり、一部のメソッドにしか使われないフィールドがあると凝縮度が低い
凝縮度はクラスを分ける目安となる
凝縮度を高めるためには1クラス1メソッドにするイメージ
・サービス
アプリケーションの振る舞いを定義したアプリケーションサービス
ドメイン知識を表現したドメインサービス
の二つに分けれる
・ファクトリ
複雑なオブジェクトの生成を責務とするオブジェクトをファクトリと呼ぶ
・仕様
Specificationというオブジェクトを作って
これを渡してSpecificationのメソッドを実行するという技がある
これでSpeciticationにレポジトリを記載し、ドメインと分離するとのこと
・ユビキタス言語
認識の祖語や翻訳にコストをかけないための共通言語
プロジェクトで使う
・境界付けられたコンテキスト
モデルに対するとらえ方が異なる箇所でシステムを分割します
そして領域ごとに言葉の統一を図る
このような領域に線を引くこと境界付けられたコンテキストと呼ぶ
本書はとてもためになりました
エリックさんの本だと読むのがつらすぎるので
まず最初に本書を読むことをお勧めします!
DDDに興味が出てきたらぜひどうぞ