2개의 dependency를 가지고 있는 클래스가 있다.

비즈니스 로직을 처리를 하려면 2개의 dependency를 이용해서 하나의 비즈니스 로직을 처리한다.

개발을 하다보니, dependency가 같고, 호출하는 메소드가 같은 경우가 종종 발생을 한다.
XXXXBO.java와 YYYYBO.java에 들어가는 코드가 다음과 같다.
Travel travel;
TravelCount travelCount;
public void setTravel(Travel travel){
      .......................
}
public void setTravelCount(TravelCount travelCount){
     ........................
}

public void processAndInsert(){
     .........................
     travel.insert();
     count.plus();

}
public void processAndDelete(){
     ......................................
     travel.delete();
     count.minus();
}


같은 패턴의 dependency와 메소드 실행을 보면서, 2개의 dependency를 가지는 클래스를 만들어서서 클라이언트 클래스에서 하나의 dependency만을 가지게 만들었다.
TravelUpdater.java라는 클래스를 만들어서 다음과 같이 구현을 하였다.
Travel travel;
TravelCount travelCount;
public void setTravel(Travel travel){
      .......................
}
public void setTravelCount(TravelCount travelCount){
     ........................
}

public void insert(){
    
travel.insert();
     count.plus();
}
public void delete(){
    
travel.delete();
     count.minus();
}

그러면, XXXXBO와 YYYYBO클래스에는 다음과 같이 코드가 들어간다.
TravelUpdater travelUpdater;

public void setTravelUpdater(TravelUpdater travelUpdater){
     ........................
}

public void processAndInsert(){
     .........................
    
travelUpdater.insert();
}
public void processAndDelete(){
     ......................................
    
travelUpdater.delete();
}
Travel과 TravelCount가 테스트가 된 클래스라면 TravelUpdater는 테스트도 필요가 없다. XXXXBO와 YYYYBO에서는 TravelUpdater만 mock으로 넣어서 테스트를 하면, dependency도 한개만 추가를 하면 된다.

클래스가 하나 늘어나긴 했지만, 중복을 제거할 수 있었고, 테스트 할때도 dependency의 감소로 코드를 만들기도 쉬웠고, 이해도 쉬웠다.

 만약 dependency가 2개가 아니라 3개,4개...점점 많아질 수록 위임받는 클래스를 사용하면 클라이언트 클래스에서 코드가 변경이 되지 않을 뿐만 아니라, XXXXBO와 YYYYBO 클래스 테스트는 깨지지 않고 강건하게 작성이 될 것이다.
Posted by ologist

블로그 이미지
ologist

공지사항

Yesterday191
Today136
Total34,708

달력

 « |  » 2012.02
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      

최근에 받은 트랙백

글 보관함