1

私のコントローラーは次のようになります:

@RequestMapping(value = "/User", method = RequestMethod.GET)
public @ResponseBody String getUser(@RequestParam long id) {
User user = userService.get(id);
return user.name;
}

サービスはこんな感じ

@Transactional(readOnly = true)
public User getUser(long id) {
  return userRepository.get(id);
}

サービス層でのトランザクション、サービス層でのトランザクションというマントラが聞こえます。しかし、リポジトリをコントローラーに直接注入するのはとても悪いことです。最初にリポジトリをトランザクション対応にした後、伝播が必要なので、まだ存在しない場合はトランザクションを作成しますか?

4

1 に答える 1

4

これは、プロジェクトのサイズとプロジェクト内の複雑さによって異なります。複数のリポジトリが相互作用する必要がある場合、サービスは優れていると思います。

たとえば、BankAccountServiceはAccountRepositoryを使用してアカウントの借方/貸方を記入する必要がありますが、LedgerRepositoryを使用してトランザクションを記録する必要もあります。

単純にクラッド操作を実行する場合は、リポジトリをコントローラに配置することを躊躇しません。あなたの操作がより進んでいるなら、私はサービスアプローチを取ります。最も単純なユースケースに対処し、より複雑なものが導入されたときにリファクタリングします。大きなデザインを前もって行うことは、「あなたはそれを必要としない」という原則に違反することがよくあります。

また、異なるコントローラーが同じ操作を実行する必要がある場合にも、サービスは便利です。したがって、作成しているロジックがコントローラー固有であり、コードを再利用する必要がない場合は、リポジトリーをコントローラーに配置するのが理にかなっています。他のコントローラー内でロジックを複製する必要がある場合は、サービスが再利用可能になるため、サービスの方が適している場合があります。

于 2012-12-05T09:29:00.460 に答える