2009년 01월 22일
디자인패턴을 이용한 객체 유효성 검사
디자인패턴을 이용한 객체 유효성 검사
작성자 : 이지홍
시나리오
A와 B 웹 사이트가 있는데, A는 어떠한 서비스를 제공하는 웹 사이트며 B는 그 서비스를 이용하는 웹 사이트이다.
서비스를 요청하고 응답하기위해 HttpClient 객체를 사용하며, 서비스를 이용하는 사이트는 다수 존재 할 수 있다.
여기서 서비스를 제공하는 웹사이트인 A의 개발자는 A웹사이트에 요청을 전달하기위한 반복적인 로직과 개발비용을 줄이기위해
자신의 서비스를 이용하는 사이트에 요청을 보낼 수 있는 모듈을 만들어 배포하였다.
문제점
- 서비스를 이용하는 B와 같은 사이트에서 HttpClient 객체에 실어 보내는 값들이 서비스를 사용하기 위한 필수 정보를 담고 있어야 하며, 요청전에 그 값들이 유효한 값들인지를 판단한 다음 HttpClient로 생성되어 전송 되어야만 한다. 또한 요청정보는 요청 금지어 리스트들을 포함하고 있지 않는지 체크해야만 한다.
해결책
- 요청정보를 담고있는 객체의 생성자에 유효성 검사 로직을 넣고 그 결과값을 private boolean 변수에 저장한 다음, 해당 변수는 getter만 생성하여 조회만 가능 하도록 구현 한다.
- 요청을 생성하는 Service 객체에서 요청메소드를 호출할때 요청정보를 담고있는 객체의 변수 값을 확인 한 다음, 그 값이 유효할 경우에만 Service 객체를 통해 서비스를 호출 할수 있도록 한다.
- 추가 설명
- 클래스 구성 : RequestAction, RequestDataBean, RequestService,
여기서 RequestAction은 A사이트에서 서비스를 사용하기 요청하는 액션이며, RequestDataBean은 요청정보를 담고 있는 데이터객체이다.
RequestService는 유효성검사를 수행하기위한 기초 정보인 Static Final String[] arr_vanstring = {"#","!",..} 로 선언된 멤버변수를 가지고 있으며., RequestData객체를 생성하는 setCreateRequestData(String data1,int data2, ...) 메서드와 HttpClient객체를 생성하여 RequestDataBean 객체를 전송하는 setMakeHttpClient(RequestDataBean rdb1) 메서드를 가지고 있다.
A사이트에서 배포한 서비스를 요청하는 B사이트의 Action단의 코드 (RequestAction)
- public String RequestAction{
RequestService requestService = null;
RequestDataBean rdb1=requestService.setCreateRequestData("이지홍",27) //요청 정보 생성 //Spring IOC에 의해 requestService 객체 인스턴스 화
if(rdb1.isValidate()){ //유효성 검사
requestService.setMakeHttpClient(rdb1); //요청 전송
}
else{
retuen ERROR;
}
- return SUCCESS;
- }
- RequestService
- private static final String arr_vanstring={"#","{"};
- public RequestDataBean setCreateRequestData(String data1,int data2, ...){
- .... 필요한 서비스 로직 수행
- return new RequestDataBean(data1, data2, ...);
- }
- public void setMakeHttpClient(RequestDataBean rdb1){
- HttpClient client =new HttpClient();
- .... //빈즈의 내용을 httpclient객체에 담는다.
- client.send();
- }
- public String getArr_vanstring(){
- return RequestService.arr_vanstring;
- }
- RequestDataBean의 생성자 코드를 보자
private String data1 = null;
private int data2 = 0 ;
private String arr_vanstringlist = null; //요청 금지어 리스트
private boolean validate = false; //요청 유효성 검사 정보
public String getData1(){
return this.data1
}
public String getData2(){
return this.data2
}
public boolean isValidate(){
return this.validate;
}
public RequestDataBean(String data1,int data2,String[] arr_vanstring){
this.data1=data1;
this.data2=data2;
this.arr_vanstring=arr_vanstring;
this.valiedate=this.setValidate(arr_vanstring);
}
- //유효성검사 메서드
- private boolean setValidate(String[] arr_vanstring){
- boolean validate=false;
- if(data1 != null && data1.length>0){
..... //유효성 확인 로직
- validate=true;
- }
else{
- valiedate=false;
}
return validate;
- }
- }
# by | 2009/01/22 09:12 | JAVA 향기 | 트랙백 | 덧글(0)








☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]