도메인 오브젝트

Posted by 단순대왕 Struts2 : 2014. 12. 11. 15:58

4. 도메인 오브젝트

struts2 프레임워크는 MVC 패턴을 지향하므로 모델 영역을 액션 클래스로부터 분리하는 것이 바람직하다.

액션 클래스 내부에 비즈니스 로직을 구현하면 다른 곳에서 비즈니스 로직을 재사용하기 어려워지기 때문에,

액션에서는 비즈니스 로직을 수행하기보다는 비즈니스 로직을 전담하는 별도의 도메인 오브젝트를 정의한다.

액션에서는 사용자의 요청 파라미터로부터 서비스 호출에 필요한 데이터를 모아 서비스를 호출하는 역할만 수행.

 

주의)

UI Page에서 도메인 오브젝트에 직접 값을 세팅하기 위해서 텍스트 상자의 이름을 user.userId, user.userPw,

user.userName로 지정해야 한다.

 

구현) model을 사용하는 경우 validate 확인

public class UserRegAction  extends ActionSupport {

private User user;

public User getUser() {return user;}

public void setUser(User user) {this.user = user;}         

@Override

public String execute() throws Exception {

UserDao uerDao=new UserDao();

uerDao.create(user);

return SUCCESS;

}

@Override

public void validate(){

if(user.getUserId() == null || "".equals(user.getUserId())){addFieldError("userId", "required user ID.");}

if(user.getUserPw() == null || "".equals(user.getUserPw())){addFieldError("userPw", "required user PWD.");}   

}

}

4.1. ModelDriven Preparable 인터페이스 활용

도메인 오브젝트가 요청 파라미터 값을 얻어오되 입력 폼에서 도메인 오브젝트 명을 명시적으로 기술하지

않아도 되도록 ModelDriven 인터페이스를 사용한다.

이렇게 ModelDriven 인터페이스를 구현한 액션 클래스는 도메인 오브젝트와의 결합도가 낮아진다.

 

- ModelDriven 인터페이스

  도메인 오브젝트에 접근하기 위한 방법으로 ModelDriven 액션을 사용한다.

  ModelDriven 액션 클래스를 생성하기 위해서는 ModelDriven 인터페이스를 구현한다.

 

구현)

 public class UserRegAction implements Action, ModelDriven{

    User user = new User();

    public User getUser(){ return user; }

    @Override

    public String execute() throws Exception{ … }

    @Override

    public Object getModel(){

return user;

 }

}

  <action name=”” class=””>

    <interceptor-ref name=”modeDriven” />

  </action>

 

- Preparable 인터페이스

  Preparable 인터페이스는 액션 메소드(execute)를 실행하기 전에 다른 로직을 실행하고 싶을 때 사용한다.

  Preparable 인터페이스를 구현한 클래스에는 prepare() 메소드를 오버라이딩해야 한다.

  이 메소드는 액션 메소드가 실행하기 전에 수행되어야 하는 로직을 기술한다.

 

구현)

 public class UserRegAction implements Action, ModelDriven, Preparable {

    User user;

    public User getUser(){ return user; }

    @Override

    public String execute() throws Exception{ … }

    @Override

    public void prepare() throws Exception{

      user = new User();

    }

    @Override

    public Object getModel(){ return user; }

}

  <action name=”” class=””>

    <interceptor-ref name=”prepare” />

<interceptor-ref name=”modeDriven” />

  </action>

 

주의) struts.xml 파일 작성시 <interceptor-ref /> 순서 중요

<action name="UserActionModelDrivenPreparable" class="action.UserActionModelDrivenPreparable">

<interceptor-ref name="params" />            // 모델 생성시 값 없음

 

<interceptor-ref name="prepare" />

<interceptor-ref name="modelDriven" />

 

<interceptor-ref name="params" />            // 모델 생성시 값 정상

 

<result name="input">/form/userRegForm.jsp</result>

<result name="success">/form/userRegSuccess.jsp</result>

</action>

'Struts2' 카테고리의 다른 글

리절트 개요와 종류  (0) 2014.12.11
스트럿츠2 아키텍쳐  (0) 2014.12.11
Action  (0) 2014.12.11
struts.xml  (0) 2014.12.11
web.xml  (0) 2014.12.11
  
 «이전 1 ··· 8 9 10 11 12 13 14 ··· 77  다음»