参考資料
Laravelでドメイン駆動設計(DDD)を実践し、Eloquent Model依存の設計から脱却する - Qiita
アプリケーションで実現したい、機能をユースケース図に書くか、「〇〇が■■する」という文章を箇条書きでまとめる
上記でまとめたユースケースをUseCase層として実装していく
UseCaseはLaravelで言うとControllerに近い概念
UseCaseの引数にはValueObjectを渡すことがおすすめされている。
理由としては、引数にIDを渡すにしてもint
型より、UserAccountId
のように独自の型を渡した方がより安全になる
コンストラクタを明示的にプライベートにすることが大事。
インスタンスが作られる方法を特定のメソッドのみに絞ることで、不整合なデータや、思わぬデータをデータベースから取得することを防ぐことができる
fainal class TodoEntity
{
private function __construct() {}
// このメソッドを通してでしかインスタンスかできない
public static function reconstructFromRepository(
UserId $userId,
TodoTitle $todoTitle
): TodoEntity {
$todo = new TodoEntity();
$todo->userId = $userId;
$todo->title = $todoTitle;
return $todoEntity;
}
}
理由はEntity同じ