はじめに
DDDを最近勉強し始めているのですが、いまいちピンと来ていません。なので、概要から学習すべく記事にしていきます。
ドメイン駆動設計の概要
ドメイン (Domain)
ソフトウェアが解決しようとしているビジネスの問題領域です。例えば、銀行業務、在庫管理、eコマースなどがドメインとなります。
ユビキタス言語 (Ubiquitous Language)
ドメイン専門家(ビジネスのエキスパート)と開発者が共通の言語を使ってコミュニケーションを取ることを指します。これにより、誤解を減らし、一貫性のある理解を促進します。
エンティティ (Entity)
固有の識別子を持つオブジェクトです。例えば、ユーザー、注文、商品などがエンティティとなります。
値オブジェクト (Value Object)
識別子を持たず、属性によって一意に識別されるオブジェクトです。例えば、住所や金額などが値オブジェクトとなります。
アグリゲート (Aggregate)
関連するエンティティと値オブジェクトをグループ化したものです。アグリゲートは整合性を保つための一つの単位として扱われます。
リポジトリ (Repository)
永続化されたエンティティを取り扱うためのインターフェースです。データベース操作を抽象化し、ドメインロジックから分離します。
サービス (Service)
エンティティや値オブジェクトに属さないドメインロジックを持つオブジェクトです。特定の操作やビジネスルールをカプセル化します。