Ddd_In_Rails_Way
RailsでDDDを実現する
前提
DDD とは
Rails(主にAR) と DDD は相性が悪い
- Active Record モデルをドメインモデルとして扱う問題点
- テストしづらい
- 純粋なドメインロジックのテストがしたいだけなのに、DBの前準備が必要
- Fat Model
- インフラ層のロジックが入り込む
- ビジネスロジックがインフラ都合に引っ張られがち
- 本来ドメインの変更とテーブルの変更は連動しないはず
- テーブル変更が全てのドメインに影響する
- テストしづらい
参考
事例
どこまでDDDに則るかは濃淡がある。
Rails Way は破壊しない方針
- DDDに "寄り道する" という考え方
- ActiveRecord でデータをやりとりする
- 紳士協定でARメソッドは限定的に呼び出す
- 少しだけ実装が増える
- 以下が新登場
- ドメインモデル
参考
Rails Way 逸脱 (DDD重視)
インフラ層にActiveRecordを閉じ込める
ドメインロジックは純粋なRubyで実装する
実装量が増える
- 以下が新登場
- インフラ層(リポジトリ)
- ドメインモデル
参考
- 以下が新登場
比較検討
方針 | 実装コスト(量) | (ドメイン)凝集度 | テストしやすさ | 変更コスト |
---|---|---|---|---|
Rails | ◎ | △ | △ | △ |
Rails Way + DDD寄り道 | ○ | ○ | ○ | ○ |
脱法Rails | △ | ◎ | ◎ | ◎ |