データベース中心の設計になってしまう問題
from 従来のレイヤードアーキテクチャの問題点
従来の レイヤードアーキテクチャ では、データベースを中心に開発が行われがち
ドメインモデリングにデータベース駆動設計を持ち込むな
依存の向きに沿っているため
https://scrapbox.io/files/66bc870f3d3631001c7fa338.png
これにより Web 層 は ドメイン層 に依存し、ドメイン層は 永続化層(データベース)に依存する
すべてのものは永続化層上に構築される
本来 ビジネスロジック(振る舞い)を正しく実装できてから、永続化層や Web 層の実装をすべき
DDD
ORM の利用もデータベース中心の設計を助長する
warning.icon ORM を使うなということではない
レイヤードアーキテクチャ に ORM を持ち込むと、ドメイン層と永続化層が 密結合 になりやすくなる
理由
通常 ORM によって制御されるエンティティは、永続化層に配置される
https://scrapbox.io/files/66bc8c9c2b22db001d0e8a37.png
従来の レイヤードアーキテクチャ では、「自身と同じ層か、下の層にあるコンポーネントにしかアクセスできない」という制約があるため、ドメイン層のコードはエンティティにアクセスできる
ドメイン層の至るところでエンティティにアクセスし、密結合になる
密結合になると、ドメイン層ではエンティティを ビジネスモデル として扱うようになる
ドメイン層ではビジネスロジック + 永続化層の関心事を扱うことに
永続化層の関心事
Eager load か Lazy load
トランザクション
単一責任の原則 違反
結果として、ドメイン層のコードに影響を与えることなく永続化層のコードを変更するのが難しくなる
アーキテクチャ の目標から遠ざかる
保守容易性#66bb554075d04f00006adfbf