Model 객체 전달 방식에 대해서만 말씀 드리면,,
Controller에서 사용하는 (Servlet)Model 객체를 Service로 전달하는 것은 비추구요..
Controller에서 사용하는 (Servlet)Model은 Controller와 View Page 간에 전달용으로 사용하시고,
Controller - Service - DAO (Repository) 에 두루 걸치는 모델 객체는 별도의
(Service)Model(또는 DTO)을
작성해서 사용하시고,, (두 Model의 용도가 다르기 때문에..)
Controller에서 (Service)Model과 (Servlet)Model을 binding (한쪽 Model의 필요한 속성들을
다른 쪽 Model에 전달하는 과정)해서 사용하시는 걸 권장드립니다.
Model binding 관련해서는,, Map의 values들을 전달해주는 라이브러리 등도 있으니 확인해보시기 바랍니다.
앞에서 설명 드린 방식은 (설계적으로) 원론적이며 이상적으로 권고해드리는 내용이며,
실제 상황에 따라 업무 효율에 크게 차이가 난다면, 편의적으로 처리하는 것도 가능하지 않을까하는
의견입니다. ^^;
다른 분들이 말씀하신 것처럼 도메인 계층이 클라이언트 계층(WEB, REST API,
WS 등)에 의존하는 상황은 금물입니다.
가능한 서비스를 원자적인 수준으로 잘게 나누고 컨트롤러에서 여러번 호출하
도록 처리하는 편이 좋겠습니다.
반드시 한 서비스에서 두 가지 값을 반환해야 한다면 최윤석(mOer)님 말씀처
럼 DTO를 만들어 이 객체에 담아 반환하는 방법이 자바쪽의 정석이겠죠.
해당 DTO가 특정 용도로 한번만 사용된다면 DTO를 만드는 것이 부담되고 낭비
로 느껴지기 때문에 Map, List, 배열 등에 담아 사용하기도 합니다.하지만 이
럴 경우엔 타입 확인이 안 되는 문제가 있습니다. 담는 값이 모두 같은 타입
이라면 지네릭을 사용해서 타입 확인이 되도록 할 수 있지만 타입이 다르다면
컴파일러가 타입을 확인하도록 할 수 없습니다.
스칼라라는 언어에서는 이럴 때 쓰라고 Tuples라는 특수 목적의 자료구조를
가지고 있습니다. n개의 객체를 간단하게, 타입 확인도 되면서, 한 묶음으로
묶어 메서드에 전달하거나 반환할 수 있습니다.
http://codemonkeyism.com/tuples-scala-goodness/
제가 전에 자바용으로 만들어 놓은 것이 있어 좀 전에 github에 올려놨으니
혹시 필요하면 참고하세요.
https://gist.github.com/2299564
'Framework & Platform > Spring' 카테고리의 다른 글
spring - annotation 2 (0) | 2012.05.09 |
---|---|
spring - annotation 1 (0) | 2012.05.09 |
Spring - @Controller (0) | 2012.05.09 |
Spring - @RequestMapping (0) | 2012.05.09 |
Spring MVC Deprecated API (0) | 2012.05.08 |