DB에서부터 MVC의 각 단계별로 수많은 정보들이 오고간다. 이 때, 많은 정보들을 한번에 보낼 수 있는 정보 그릇이 필요하다. 정보 그릇에 대해 내 나름대로 구분을 하고 개념을 세워보았다.
DTO : 정보 근원지인 DB의 테이블 컬럼을 모델링한 클래스. 한 테이블의 모든 컬럼을 멤버변수로 가진다.
VO : DTO 외의 정보그릇, 테이블 컬럼 이외의 정보를 담아줘야 할 때, 쓰이는 정보그릇.
2-1. 어떤 뷰에 필요한 모든 정보를 가지고 있는 VO.
2-2. mapper.xml에 파라미터로 넘겨주기 위한 VO.
Mapper.xml : #{VO.abcd} or #{abcd} == vo.getAdbc();
여기서 알 수 있는 것은 VO클래스의 멤버변수가 아니더라도, getAbcd() 메소드를 만들면, 원하는 값을 JSP나 Mapper.xml에 보낼 수 있다.
즉 mapper나 jsp에 필요한 값에 대한 연산 로직을 서비스나, 모델 단이 아닌 VO클래스 내부로 보낼 수 있다는 장점이 있다!
ex) mapper.xml에 정보를 전달할 때, hashMap이용과 VO 차이
public class BoardVo {
String keyword; //for 검색 , 확장성
private int cp;//페이지 번호
private int ps;//페이지 사이즈
{
cp = 1;
ps = 5;
}
public int getStartRow() {
return (cp-1) * ps; //ex) 0 * 5 = 0
}
public int getEndRow() {
return cp * ps; //ex) 1 * 5 = 5
}
}
위 소스의 VO와 아래 소스의 VO는 별개. hashMap을 사용할 때, 연산로직을 서비스단에서 해줬다는 것을 보이기 위해 가져옴.
public interface BoardMapper {
List<Board> list(Map<String,Integer> map);
}
@Autowired
private BoardMapper boardDao;
@Override
public BoardVo listS(int cp, int ps) {
Map<String, Integer> map = new HashMap<String,Integer>();
int initRow = (cp-1)*ps;
int lastRow = cp*ps;
map.put("initRow",initRow);
map.put("lastRow", lastRow);
List<Board> list = boardDao.list(map);
}
hashMap 같은 경우에 넘겨야 할 파라미터가 많지 않을 경우, 그리고 연산이 필요없는 경우에 VO를 설계하는 것보다 편리할 것 같다.
먼말인지모르겠음너무어려움