2011-11-13 2 views
2

프리즘 (Prism) 데스크톱 응용 프로그램에서 작업 중이며 WCF 백엔드를 사용할 때 조회/참조 데이터 목록을 처리하는 가장 좋은 방법을 알고 싶습니다. 나는이 질문이 몇 가지 영역을 다루고 약간의 지침을 제공 할 것이라고 생각한다.MVVM에서 WCF 서비스를 호출 하시겠습니까?

예를 들어, 시스템의 여러 입력 화면에서 사용되는 제품 (코드 및 설명)이 포함 된 조회를 고려해보십시오.

  1. viewmodel이 컨트롤을 채우기 위해 데이터를 얻기 위해 WCF 서비스를 직접 호출합니까?
  2. 독자적인 viewmodel 등으로 제품을 다루는 컨트롤을 만든 다음 제품 조회가 필요한 모든 위치에서 사용하거나 모든 단일 폼보기 모델에서 제품 ItemsSource를 다시 채우는 콤보 박스를 다시 구현 하시겠습니까 그것을 사용합니까?
  3. LookupData 서비스와 같은 새로운 WCF 서비스를 만들고이를 사용하여 내 조회 목록을 채울 수 있습니까? - 내가 이런 일을한다면 나는 많은 조회를하게 될 것이라고 염려한다.
  4. 여기에 대한 다른 접근 방법은 있습니까?

답변

2

WCF 서비스 용으로 proxy 개체로 조회 개체/구성 요소를 만드는 것이 좋습니다. 그것은 여러 가지 방법으로 작업 할 수 있지만, 대부분의 간단한 내 마음에 오기는 다음과 같습니다

  1. 모든Products 엔티티를 제공하는 방법으로 WCF 서비스를 구현 한 (제품 코드에 예를 들어 내놓고.)
  2. 구현 요청 제품을 얻을 수 WCF 클라이언트를 사용하는 구성 요소는 현실을 부르 자
  3. ProductsProvider에 의존 걸릴 것입니다 귀하의 뷰 모델 ProductsProvider (예. constructor injection를 통해)

이 모델의 주요 요소는 ProductsProvider입니다. Products 개체에 대해 일종의 캐시로 작동합니다. 먼저 웹 서비스에 모든 제품 (또는 원하는 부분까지)을 요청할 것입니다. 그런 다음 제품을 검색해야 할 때마다 제공자에게 물어보십시오. 제품이 인 방법을 처리하는 것은 제공자의 책임입니다. - 아마도 이미 지역 목록에 있습니까? 업데이트를 위해 웹 서비스를 호출해야합니까? 예 : 이제

public class ProductsProvider 
{ 
    private IList<Product> products; 
    private IProductsService serviceClient; 

    public ProductsProvider(IProductsService serviceClient) 
    { 
     this.serviceClient = serviceClient; 
     this.products = serviceClient.GetAllProducts(); 
    } 

    public Product LookUpProduct(string code) 
    { 
     // 1: check if our local list contains product with given code 
     // 2: if it does not, call this.serviceClient.LookUpProduct 
     // 3: if service also doesn't know such product: 
     // throw, return null, report error 
    } 
} 

이 당신에게주는 무슨이다 :

  • 당신 만이 필요 하나ProductsProvider 예를
  • 서비스를 호출하는 방법을 때와
  • 더 나은 유연성
  • 당신의 보기 모델은 전혀 WCF를 다룰 필요가 없습니다.

편집 :

두 번째 질문은. 제어가 필요하지 않을 수도 있지만 Product 엔티티에 대한 뷰 모델을 갖는 것이 좋습니다.

관련 문제