前提・実現したいこと
DDDで、リポジトリクラスに定義するメソッドについて質問があります。
例えば User集約というのがあるとします。
以下のように User集約は一意に識別するNoを持っているとします。
新しくUserを登録する場合は、既存のUserのNoに1加算した数値を、これから登録するUserのNoとしたいとします。
そのときに、「既存のUserのNo」を取得するために、以下のようなサービスとリポジトリの実装を検討しました。
該当のソースコード
php
1class UserRegisterService 2{ 3 private IUserRepository $userRepository; 4 5 public function register(string $name): void 6 { 7 $latestUser = $this->userRepository->findLatestUser(); 8 $this->userRepository->save( 9 new User( 10 new No($latestUser->No()->value() + 1), 11 $name 12 ) 13 ); 14 } 15} 16 17// IUserRepository のInterface定義は省略してます。 18class UserRepository implements IUserRepository 19{ 20 public function findLatestUser(): User 21 { 22 // 以下のクエリに相当するものをORMか何かで取得して、User集約に変換して返す。 23 $query = 'SELECT * FROM Users ORDER BY No Desc Limit 1'; 24 return; 25 } 26 public function save(): void 27 { 28 // 保存処理 29 } 30}
疑問
リポジトリにこういったメソッドって追加し続けてよいのですか??
上の例では最新のUserを取得している例だけですが、
最古のUserのNoが欲しいとか、ちょうど中間のUserのNoが欲しいとかも
リポジトリのメソッドに追加して行ったら肥大化しまくるんですが、よいのか気になりました。
リポジトリの立ち位置がよくわからないので教えてください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。