次の 2 つのオプションを検討してください。
オプション #1:コントローラーで必要なサービスを自動配線する
@Controller
@RequestMapping(value="/foo")
public class FooController {
@Autowired
private FooService fooService;
@Autowired
private BarService barService;
@Autowired
private BazService bazService;
@RequestMapping(method=RequestMethod.GET)
public String getFoo(...) {
Foo foo = fooService.getFooInstance(...);
List<Foo> foos = fooService.getFooList(foo);
List<Bar> bars = barService.getBarList(foo);
Baz baz = bazService.getBaz(foo);
...
return "view/foo/index.jsp";
}
}
オプション #2:特定のサービスでの UoW の依存サービスの自動配線
@Controller
@RequestMapping(value="/foo")
public class FooController {
@Autowired
private FooService fooService;
@RequestMapping(method=RequestMethod.GET)
public String getFoo(...) {
Foo foo = fooService.getFooInstance(...);
FooDTO fooInfo = fooService.getFooAllInformation(foo);
List<Foo> foos = fooInfo.getFoos();
List<Bar> bars = fooInfo.getBars();
Baz baz = fooInfo.getBaz();
...
return "view/foo/index.jsp";
}
}
@Service
public class FooServiceImpl implements FooService {
@Autowired
private FooRepository fooRepository;
@Autowired
private BarService barService;
@Autowired
private BazService bazService;
...
@Override
@Transactional
public FooDTO getFooAllInformation(Foo foo) {
List<Foo> foos = getFooList(foo);
List<Bar> bars = barService.getBarList(foo);
Baz baz = bazService.getBaz(foo);
...
}
}
現在、オプション #1 を使用していますが、すべて問題なく動作しています。しかし、このアプローチで十分かどうかは疑問です。それらのいずれかに、他のものよりも大きな利点がありますか? 私は、サービス@Transactional
のINSERT
一部について認識していることに言及する必要があります (ここでは省略しました)。しかし、データを読み取るだけではどうでしょうか。