2011-02-06 3 views
0

우리는 서로 다른 버전의 소프트웨어 서비스 레이어를 실행하는 다른 클라이언트를 보유하고 있습니다. 최신 서비스 구성 요소에는 이전 서비스 구성 요소에는없는 일부 기능이 있습니다. 우리는 우리의 모든 고객에게 제공하고자하는 새로운 프리젠 테이션 레이어를 만들기 위해 노력하고 있습니다. 이전 서비스를 사용하는 클라이언트는 작동하지만 클라이언트가 최신 서비스 계층을 실행하는 경우 최신 기능에 액세스 할 수 있어야합니다.서비스 레이어 버전 간의 기능 차이점 처리

가능한 모든 기능상의 차이점에 대해 if 문으로 코드를 낭비하지 말고, 특히 서비스 계층에 새로운 기능을 추가하고 지원할 예정입니다. 그렇다면이 기능의 차이를 가장 깨끗하게 처리하기 위해 디자인 패턴을 제안 하시겠습니까?

답변

1

차이점이 대부분보기에있는 경우 부분보기 및 RenderPartial을 사용자 지정 확장 프로그램 RenderPartialIfSupported로 대체하면 코드를 매우 깨끗하게 유지해야합니다. 버전 폴더에 뷰를 정렬하고 기본 뷰 코드에서 필요한 버전을 직접 지정하지 않아도됩니다.

버전 차이가 작업에 쉽게 연결되는 경우 작업 필터 속성이 좋은 방법입니다. 그런 다음 보편적으로 지원되지 않는 작업 각각에 [RequireVersion (1.1)]을 추가하면됩니다.

관련 작업 및 해당 RequireVersion 속성을 찾아 동작이 지원되지 않는 경우 아무 것도 렌더링하지 않는 ActionLink의 사용자 지정 버전과이를 결합 할 수도 있습니다.

+0

멋진 제안을위한 Upvoting. 뷰와 컨트롤러가 버전 번호에 대해 전혀 알지 못하는 솔루션을 원하고 있습니다. 저장소 기능 만 다릅니다. 우리는 저장소에 의존성을 컨트롤러에 주입하기 때문에 우리는 DI 프레임 워크에 맡겨서 우리가 어느 버전을 사용하는지 알 수 있습니다. – traffichazard

+0

동일한 접근 방식은 버전 번호 대신 필수 인터페이스 또는 속성 이름을 사용하여 작동합니다. 여러 기능을 확인해야하는 경우 필터 속성 방법을 사용해야합니다. 뷰의 경우 RenderAction과 RenderPartial 사이에 무언가를 설정할 수 있습니다. 필터 메소드는 필터 속성을 확인할 수 있도록 액션 메소드를 호출하지만 모델은 액션에 의해 생성되는 것이 아니라 매개 변수로 전달됩니다. –

관련 문제