2011-02-06 3 views
1

내 RIA 도메인 컨텍스트를 내 뷰 모델에서 추상화하여 데이터 소스에 무관심하게 만드는 것에 대한 모범 사례를 찾고 있습니다. 내가 찾을 수있는 가장 좋은 솔루션은 here과 같은 서비스 에이전트 패턴 인 것 같습니다. 그러나 비교적 복잡한 쿼리 로직을 수행하려면 어떻게해야합니까?복잡한 쿼리를 사용하는 WCF RIA 서비스 에이전트 패턴

예를 들어, 현재 내보기 모델에 내 도메인 컨텍스트가 있습니다. 의 내가 검색 쿼리 구성에 관여하는 논리의 비트가있는 ContactSearchViewModel, 있다고 가정 해 봅시다 : 나는 물론 public EntityList<Contact> SearchContacts(string firstName, string lastName, string phone, ContactType contactType)과 같은 형태 서명 된 서비스 에이전트 방법을 가지고 있지만 경우 상상할 수있는 지금

protected EntityQuery<Contact> CreateSearchQuery() 
    { 
     var query = Context.GetContactsQuery().Where(
         e => e.First_Name.ToLower().StartsWith(FirstNameSearch.ToLower()) && 
         e.Last_Name.ToLower().StartsWith(LastNameSearch.ToLower())); 
     if (!string.IsNullOrEmpty(Phone)) 
     { 
      query = query.Where(q => q.Phone == Phone || 
            q.Mobile == Phone || 
            q.Work == Phone); 
     } 
     if (SelectedContactType == "Prospect") 
     { 
      query = query.Where(q => q.Contact_Type_Id == 1); 
     } 
     else if (SelectedContactType == "Customer") 
     { 
      query = query.Where(q => q.Contact_Type_Id == 2); 
     } 
     return query; 
    } 

을 내 검색어가 훨씬 복잡해졌습니다.이 인터페이스는 다루기 힘들어 질 것입니다. 도메인 컨텍스트와 마찬가지로 VM에서 쿼리를 생성 할 수있는 더 나은 대안이 있습니까? 아니면 그냥 그것을 빨아 및 일부 매개 변수 개체를 사용해야합니까?

저는 현재 VM의 쿼리를 생성 할 수있는 것을 선호합니다. 왜냐하면 저는 기본 검색 클래스와 템플릿 생성 방법을 사용하여 다양한 검색을 수행하는 VM의 작은 계층을 가지고 있기 때문에

enter image description here

내가이 상속 구조를 사용하여 고정 코드 중복의 많은 원인이 클라이언트에서 쿼리를 생성 할 수있는 것은 아닙니다.

+0

은 내가 이런 질문의 몇 시간 이내에 답변의 톤을 얻을 것입니다 시간을 기억한다. 이제 사람들은 단순한 질문에만 답하는 것을 귀찮게합니다. StackOverflow 정말 내리막 길을 갔다. –

+0

나는 최근에 같은 질문을 통해 생각 해왔다. VM 데이터 소스를 불가지론스럽게 만드는 것에는별로 관심이 없습니다 (실제로 나타나는 것보다 훨씬 더 어렵습니다).하지만 분명히 DomainContext와 분리하려고합니다. 좋은 접근 방법은 EntityQuery를 반환 한 서비스 계층에 'GetContactsQuery'메서드를 추가 한 다음 EntityQuery를 사용하는 'LoadContacts'메서드를 추가하는 것입니다. 더 나은 접근법은 서비스 에이전트에서 쿼리를 '재생'하기 위해 쿼리 유형을 만드는 것일 수 있습니다. 그러한 접근법 중 어느 쪽이 합리적인 것처럼 보입니까? –

답변

1

리포지토리 패턴을 살펴 보는 것이 좋습니다. 그것은 DDD의 일부이지만 모든 아키텍처, IMO에 적용됩니다. 쿼리 로직을 저장하는 것이 목적입니다.

single purpose이 아닌 이상 VM 개체 쿼리 로직을 제공하는 것이 더러운 것처럼 보입니다.

+0

예. 감사합니다. 나는 저장소와 서비스 에이전트 사이에 어느 정도의 하이브리드를 사용했다. VM의 경우 유일한 목적은 쿼리입니다. 검색보기의보기 모델입니다. 검색 조건 (뷰 상태)을 수집하고 쿼리 (뷰 동작)에 사용합니다. –