リポジトリとサービスをどのように分離する必要がありますか? IMHO クライアント (コントローラーなど) は、永続化の実装から分離する必要があるため、主にリポジトリではなくサービス層を使用する必要があります。単一のリポジトリは、1 つのエンティティのみにアクセスするメソッドを提供する必要がありますが、サービスのメソッドは、複数のリポジトリの使用を含む、より複雑なアクションを提供できます。
しかし、CRUD メソッドだけでなく、Spring Data の JPARepository のように、さらに多くの機能を提供するリッチ リポジトリをどうすればよいでしょうか? このような実装では、オブジェクトをフェッチする方法が非常に多くあり、Service でオブジェクトを複製するのはクールではありません。
では、その問題の解決策は何ですか?
A. このようにサービス層でメソッドを複製する
@Service
class XService{
@Autowired
private XRepository repository;
public List<X> findAll(){
return repository.findAll();
}
}
B. コントローラーでリポジトリを使用するだけ (オートワイヤーまたはサービス中のアクセス方法)
C. 他に良いアプローチはありますか?