2011-11-05 2 views
1

체인을 따라 전달되는 객체로 HashMap을 사용하는 CoR 패턴의 구현 예를 보았습니다. 새 콘텐츠가 처리기에 의해 추가 될 가능성이 있습니다. 아래 코드의 개요 : 핸들러 코드를 반복하지 않고 핸들러에 따라 사용될 수있는 새로운 정보와 context을 향상시킬 수로HashMap은 패턴의 남용에 책임이 있습니까?

class HandlerImpl implements Handler { 

    Handler next; 

    void handle(HashMap context) { 
     // do handler logic, perhaps adding new stuff to "context" 
     if (next != null) 
      next.handle(); 
    } 
} 

그것은 사용하기 유혹. 반면에 핸들러는 서로 의존적이됩니다. — 그들은 여전히 ​​느슨하게 연결되어 있지만 여전히 순서가 점점 중요 해지고 있습니다.

이 코드의 냄새가 있습니까? 컨텍스트 개체에 새로운 정보를 보충하지 않고 CoR 패턴으로 처리 할 수 ​​없다는 것을 알게되면 그러한 경우에 사용할 올바른 패턴은 무엇입니까?

답변

1

나는 컨텍스트를 통과하는 컨텍스트를 전달하는 것이 패턴 위반이라고 생각하지 않습니다.

일반적으로 서블릿 필터는 CoR 패턴의 예제로 사용되며 필터는 공유 요청 객체의 속성을 추가/제거하거나 요청을 새 객체로 래핑하여 임의의 작업을 차단합니다. 후속 필터 또는 서블릿

2

"처리기"의 의도에 따라 다릅니다. 하나의 대안은 "파이프 라인"으로 변경하여 필요한 입력과 그 출력을 선언합니다. 출력은 동일한 유형 일 수 있으며 입력 객체의 수정이있을 수 있습니다. 또는 일부 변환 일 수 있습니다. 그 변환은 단지 정보를 추가하거나 완전히 다른 것을 할 수 있습니다. 정보를 추가 할 필요가있는 경우 구성을 사용하여 정보를 상당히 쉽게 작성할 수 있습니다. 및 데이터를 소비하지만 느슨하게 생산할 예정이다 어떤 측면에서 결합 된 것 - 어떤 데이터의 관점에서

각 핸들러가 긴밀하게 결합 방법 (및 명시 적)은 생산 /이 필요합니다. ?

당신은 당신이 그것을 불변의 추력이 있습니까 (사용하고
  • 어떤 언어/플랫폼을 위해 노력하고 무엇
    • 가 정적이 있습니까 :에

      는 기본적으로 "가장 좋은 방법은"따라 달라집니다 타이핑 및 제네릭?)