DDDの各コンポーネントの役割のメモ書き。
Entity
アプリケーション上で登録や変更が行われるような情報を指す。アプリケーションから一意に識別できる必要がある。RDBの行データのようなイメージ。
exp. User, Order, Product
ValueObject
Entityを構成する情報。プリミティブ型でもいいが、ValueObjectにすることで安全性や視認性が高まる。
また、値マクロのようなものを記述する場合もある。
exp. FullName( FirstName + FamilyName ), Emai
DomainService
Entityで振る舞いを記述した場合、おかしなコンテキストになるような振る舞いを記述する。
exp. UserService.exist( user ), ProductService.reserveCount( product )
Factory
Entityを生成する時に特殊な処理が必要になる時、例えば一意な値を生成する処理がコンストラクタに入る、などの時はFactoryを使ってEntityの生成を行う。
Repository
永続化媒体へのEntityのwrite, readを行う。
ApplicationService
ドメインのユースケースを記述する。ロジック自体は、DomainServiceやRepositoryに委譲する。
exp. UserApplicationService.create(), UserApplicationService.remove()