문제

보고서 작성을 처리하기 위해 Reporthandler 서비스를 받으려고합니다. 보고서에는 설정할 수있는 여러 개의 다른 매개 변수가있을 수 있습니다. 시스템에는 현재 보고서 작성 방법 (MS보고 서비스, HTML 보고서 등)이 있으며 각 보고서에 대해 데이터가 생성되는 방식이 다릅니다. 나는 모든 것을 Activereports로 통합하려고 노력하고 있습니다. 시스템을 변경하고 매개 변수를 변경할 수 없으므로 경우에 따라 결과를 생성하기 위해 WHERE 절을 얻을 수 있으며 다른 경우에는 결과를 생성하는 데 사용해야하는 키/값 쌍을 얻을 수 있습니다. 공장 패턴을 사용하는 것에 대해 생각했지만 쿼리 필터 수가 다르기 때문에 작동하지 않습니다.

나는 다양한 입력을 취하고 보고서를 뱉어내는 단일 reporthandler를 갖고 싶습니다. 이 시점에서 나는 보고서 이름을 기반으로 각 보고서를 처리하기 위해 큰 스위치 명령문을 사용하는 것 외에 다른 방법을 보지 못했습니다. 내가 이것을 더 잘 해결할 수있는 제안이 있습니까?

도움이 되었습니까?

해결책

설명에서 공장보다 더 잘 일치하는 패턴을 찾고 있다면 전략을 시도하십시오.

전략 패턴

  1. 당신의 문맥 다른 보고서 입력을 캡슐화하고 추상화하는 사용자 정의 클래스 일 수 있습니다 (이 부분에 대한 추상적 인 패턴을 사용할 수 있습니다).
  2. 당신의 전략 여러 가지 쿼리 필터 또는 추가 로직을 구현할 수 있습니다. 앞으로 시스템을 변경 해야하는 경우 새로운 전략을 작성하여보고 도구간에 전환 할 수 있습니다.

도움이되기를 바랍니다!

다른 팁

전략 패턴 외에도 각 기본 솔루션에 대해 하나의 어댑터를 만들 수도 있습니다. 그런 다음 전략을 사용하여 변경하십시오. 나는 가변적 인 보고서 솔루션 외에도 가변 저장 솔루션도 있습니다. 출력은 SQL Server 또는 파일 시스템에 저장할 수 있습니다. 컨테이너를 사용한 다음 올바른 엔진으로 초기화하는 것이 좋습니다.

public class ReportContainer{
          public ReportContainer ( IReportEngine reportEngine, IStorageEngine storage, IDeliveryEngine delivery...)
}
}

/// In your service layer you resolve which engines to use
// Either with a bunch of if statements / Factory / config ... 

IReportEngine rptEngine = EngineFactory.GetEngine<IReportEngine>( pass in some values)

IStorageEngine stgEngine = EngineFactory.GetEngine<IStorageEngien>(pass in some values)

IDeliverEngine delEngine = EngineFactory.GetEngine<IDeliverEngine>(pass in some values)



ReportContainer currentContext = new ReportContainer (rptEngine, stgEngine,delEngine);

그런 다음 ReportContainer 대의원은 종속 엔진으로 작업합니다 ...

우리는 비슷한 문제가 있었고 기본 보고서 생성기 응용 프로그램과 다른 보고서 엔진 사이의 인터페이스 인 "커넥터"개념을 사용했습니다. 이를 통해 "Universal Report Server"응용 프로그램을 만들 수있었습니다. www.versareports.com에서 확인해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top