ドメイン駆動設計と Rails
DDD の戦略的・戦術的パターンを Rails アプリケーションで実践する
プロローグ — コードがビジネスを語れない
技術とビジネスの断絶。リナが直面したECシステムの複雑さと、DDDとの出会い。
ドメイン駆動設計とは — DDDの全体像
DDDの戦略的・戦術的パターンを俯瞰する。なぜDDDが生まれ、何を解決するのかを理解する。
ユビキタス言語 — チームの共通語を作る
DDDの基盤となるユビキタス言語。用語集の作り方とコードへの反映方法を学ぶ。
境界づけられたコンテキスト — ドメインを分割する
DDDの核心概念、境界づけられたコンテキスト。コンテキストマップでサービス間の関係を可視化する。
エンティティと値オブジェクト — ドメインモデルの構成要素
DDDの戦術的パターンの基礎。エンティティと値オブジェクトの違いとRailsでの実装方法。
集約 — 整合性の境界
DDDの集約パターン。集約ルートを通じた整合性の保証とトランザクション境界の設計。
リポジトリパターン — データアクセスの抽象化
ドメインオブジェクトの永続化を抽象化するリポジトリパターン。ActiveRecordとの住み分け方を学ぶ。
ドメインサービス — エンティティに属さないロジック
複数のエンティティにまたがるビジネスロジックを担うドメインサービス。Service Objectパターンとの関係。
ドメインイベント — 変化を通知する
ドメイン内の出来事をイベントとして表現する。ActiveSupport::NotificationsとAWS EventBridgeを使った実装。
アプリケーションサービス — ユースケースを実装する
ユースケースパターンでアプリケーション層を実装する。コントローラーの薄さとドメイン層の厚さを保つ設計。
コンテキストマップの実践 — サービス間の関係を定義する
腐敗防止層(ACL)、共有カーネル、顧客/供給者パターンを実装する。AWS上でのサービス間通信設計。
DDDとRailsの現実解 — Fat Modelを超えて
Railsモノリスにおける実践的なDDD配置戦略。Fat Modelからの脱却と段階的なリファクタリング手法。
エピローグ — DDDは目的ではなく手段
DDDの過剰適用の罠、段階的導入の知恵、そしてリナが学んだこと。ソフトウェアの本質に向き合う。