일부 데이터를 수집 한 다음 모두를 단일 응답으로 결합해야하는 Struts 1 액션 클래스 (작업은 struts 1에서 의도적으로 싱글 톤입니다)가 있습니다. 내가 좋아하는 것 는 상태 저장 의존성 및 스레드 안전
ResponseBuilder
은 일반적으로 내가 필드로 ResponseBuilder을 넣고 (예를 들어, 테스트를 위해) 그것을위한 세터이있을 것이다라는 별도의 클래스에 모든 응답 생성 로직을 추출합니다. 이러한 구현으로
class JsonResponseBuilder implements ResponseBuilder {
public void addElement(String key, Object value) {
...
}
public String buildResponse() {
// build response from data collected
}
}
을 다음과 내가 인해 여기 안전 문제를 스레드 위해 할 수 없기 때문에 내 응답 빌더 보인다.
이 디자인을 어떻게 변경하면 좋을까요? 공장 패턴이 적용 가능합니까?
ResponseBuilder builder = factory.getBuilder();
builder.addElement(...);
...
String response = builder.build();
보기의 설계 및 테스트 용이성 관점에서 괜찮습니다 : 나는 종속성으로
ResponseBuilderFactory
를 사용하고 그런 식으로 호출 의미? 괜찮 으면. 이 테스트 코드를 작성하는 방법? 모의 공장? 모의 건축업자?
단지 모호한 질문입니다. 모의 (공장)가 다른 모의 (건축업자)를 이상한 것으로 돌려 보내지는 않습니까? 여기에 논리적으로 보입니다. 그러나 그것이 옳은 길이면 나는 아직 알지 못합니다 (뉴비는 여기에 있습니다). – grafthez
모의를 돌려주는 일반 팩토리를 만들 수 있습니다 :). 나는 내 대답을 세부 사항으로 업데이트 할 것이다. – Jonathan
다른 답변에서 말했듯이 이것은 테스트 목적으로 만 디자인을 변경하는 경우와 같습니다. 말이 될 수도 있지만 너무 멀리하지 마십시오. Imho, "ResponseBuilder"또는 "ResponseBuilderFactory"에 대한 인터페이스가 없으면이 코드를 "new ResponseBuilder()"로 사용해야하며 문제는 테스트하지 않고 디자인과 관련이 있습니다. * "새로운 ResponseBuilder()"케이스 (필요한 경우)에서 작동하는 테스트 솔루션이 있거나 DI 컨테이너를 사용해야합니다. – jjmontes