우리는 클라이언트 (프레젠테이션)와 서버 (데이터/비즈니스 계층)간에 WCF를 사용하여 N 계층 아키텍처 응용 프로그램을 개발하고 있습니다. 솔직히 말해서 WCF를 통해 효율적으로 계산 된 데이터를 노출하는 방법에 대한 실제 예/정보를 찾을 수 없습니다.WCF를 통해 개체의 계산 된 데이터를 노출하는 방법
내 문제를 설명하기 위해 우리는 많은 거래를하는 ATM 기계를 가지고있다. 그래서 우리는 ATM 클래스와 트랜잭션 클래스 사이에 1-N 관계를 가지고 있습니다. ATM 클래스에는 Location, ModelNo, Description, InstallDate와 같은 속성이 있으며 트랜잭션 레코드에는 Amount, DateTime, CustomerInfo, TicketPaperLength, Electricity와 같은 정보가 있습니다.
WCF를 통해 이러한 클래스를 노출하는 것은 문제가되지 않습니다. 문제는 기본 Transaction 테이블을 기반으로 ATM에 대해 계산 된 필드가 많이 있다는 것입니다. 예를 들어 클라이언트 응용 프로그램은 계산 된 ATM 데이터를 기반으로 보고서를 사용합니다. ATM의 계산 된 데이터의 예로는 AverageTicketPaperLength, AverageAmount, DeviationAmount, AverageElectricity 등이 있습니다. 이러한 계산 된 데이터가 많이 있습니다. 계산은 클라이언트 측이 아니라 서버에서 수행해야합니다. 이 보고서 정의가 모두 수정 되었다면 큰 문제는 아니 었습니다. 우리는 보고서를 위해 별도의 서비스/Poco를 만들 수있었습니다. 비즈니스 계층에 계산을 넣고 필요에 따라 Poco를 채 웁니다. 그러나 클라이언트 응용 프로그램에는 ATM의 계산 된 특성 세트에서 보고서를 필터링하고 데이터로 다른 (계산 된) 특성 세트를 리턴 할 수있는 기능이 있어야합니다.
계산 된 속성이 약 500 개인 Poco를 만들 수 있습니다. 각 보고서에는 10 개의 속성 만 사용됩니다. 물론 우리는 모든 엔티티에 대해 매번 500 개의 계산을 실행하는 것을 원하지 않습니다.
그래서 일반적으로 어떻게 개체의 계산 된 데이터를 노출하는지 궁금합니다. WCF. Entity Framework, Poco 및 WCF를 설명하는 거의 모든 예제는 엔티티의 지속적인 필드 만 처리하며 이는 매우 간단합니다.
나는 DTO의를 사용하여 동의합니다. 당신의 설명이 제 문제를 꽤 지적합니다. 문제는 내가 예를 들어에 대한 정확한 정의를 모른다는 것입니다. 포어 핸드에서 GetInfoForReport1 및 GetInfoForReport2. 다른 보고서도있을 수 있으며 사용자가 요청한 데이터를 알지 못합니다. 최종 사용자는 ATM에서 일부 계산 된 필드를 선택하고 보고서를 요청합니다. 가능한 각 필드 조합에 대해 DTO를 작성하는 것은 너무 많습니다. – Erik
대답이 –
으로 변경되었습니다. 그런 다음 WCF GetCalculatedValuesForAtm을 사용하면 valueIdentifiers가 해당 계산을 참조합니다. 그러나 여전히 AverageElectricity가 높은 ATM 목록을 원한다면 모든 ATM을 반복해야하고 각 ATM의 AverageElectricity에 대해이 WCF를 호출해야합니다. (단지 1 ATM의 보고서 대신 모든 ATM의 보고서를 의미한다는 것을 깨달았습니다. 원래 질문에서는 언급되지 않았습니다.) – Erik