Header

  1. View current page

    정상혁의 수첩

Profile_img_60x60_08
195

Web단에서의 파라미터 추출

웹단에서의 파라미터추출 방식

Class  PersonVO  {

 private String name;

 private String address;

//getter

//setter

}

 

//서블릿에서

 vo.setName(request.getParameter("name");

 vo.setAddress(request.getParameter("adress");

-> 한줄이지만 name이 두번 들어간 중복된 코드. 그리고 이런 속성의 갯수만큼 코드를 반복한 경우가 많음.

 

프레임웍에서는 어떻게 처리했을까?

 

Struts

  • ActionForm(org.apache.struts.action.ActionForm) 클래스를 상속하여 사용
  • autopopulation 메카니즘.
  • web layer를 벗어나서 business layer까지 ActionForm을 가지고 가는 것은 전체코드가 web단의 프레임웍에 대한 의존성을 가지게 할 수 있다. 따라서 business layer에 전달할때는 일반 VOr객체나 map으로 바꿔서 전달하는 경우가 많다.

 

Spring MVC

  • 특별한 클래스를 상속하지 않은 일반 VO객체를 직접 사용 가능

 

MultiActionConroller

user user = new User();

bind(request,user);

 

AbstractComanndController

binding + validation

 

setComannd.class(user.class)

..

user user = (User)command;

 

 

Map vs VO

  • 비지니스 layer에 전달을 할때 파라미터를 전달하는 객체

 

VO의 장점
  • 속성명을 잘못 입력한다면 compile 단계에서 에러체크가 됨. (get,set 메서드 명을 틀리게 썼다는 말이므로). run time에서 오타에 의한 에러 가능성을 막아줌.
  • DB테이블과 1:1로 매핑될수 있으므로 클래스 선언만 보와도 DB table의 구조를 유추할 수 있을때 도 있음
  • struts에서  <bean:write/> <html:text />의 커스컴태그로 쓸 수 있음.
  • hash 연산  같은 것이 필요없으므로 Map에 비해서 빠른 속도를 기대할 수 있음.

 

Map 장점
  • 추가적인 클래스 선언이 필요없음. 관리할 파일이 적어지므로 버전관리등의 부담감이 덜함.
  • 속성이 추가되어도 추가적인 코딩이 VO에 비해서 적음.
  • 기존적으로 java에서 제공하는 메소드 활용가능

    • toString() : 메서드 안의 내용을 보여줌. VO에서는 toString() 메서도를 재정의해야만 가능함.
    • keySet(), entrySet(), values()  :  전체속성에 대해서 처리할 때 사용할수 있음. VO에서는 reflection을 사용해야만 가능.

 

 

 

 

Beanutils, PropertyUtils

 http://jakarta.apache.org/commons/beanutils/api/org/apache/commons/beanutils/PropertyUtils.html

 

 

프로젝트 사례

PersonVO vo = new PersonVO();

VOUtil.fromRequestToVO(reuqest,vo);

 

 최초 다음과 같은 의도로 작성

  1. systemier의 core service단(Business layer)까지 ActionForm을 상속한 객체를 들고 들어가지 않게 한다.
  2. DB테이블의 속성에 매핑되는 VO를  써서 파라미터를 전달할려고 한다.
  3. 비슷한 역할을 하는 VO와 ActionForm 객체를 중복해서 작성하지 않을려고 한다.

 

ActonForm을 쓰지 않고 일반 VO객체만 쓰고 별도의 utility로 변환. (spring MultiActionConroller에서 bind()와 같은 역할). 공개된 utiity들을 잘 찾아봤다면 굳이 직접 작성하지 않았을 수도 있었음

History

Last edited on 05/20/2009 07:16 by benelog

Comments (0)

You must log in to leave a comment. Please sign in.