2013-02-17 3 views
4

서비스 진영에서 검색을 구현하는 가장 좋은 방법은 무엇입니까? 예를 들어, 현재 나는 백엔드에서 linq 쿼리를 동적으로 빌드하는 고급 검색 양식을 가지고 있습니다. 서비스 스택을 사용하여 검색 기능을 폭로하려면 가장 좋은 방법은 무엇입니까?servicestack에서 검색을 구현하는 최선의 방법을 찾으십시오.

내가 [오브젝트] .FirstnameStartsWith 같은 요청 속성을 만드는 아이디어를 사용하는 사람들을 보았다, [개체] .SurnameContains 등이

답변

1

나는이

[Route("/things", "GET")] 
public class ThingList 
{ 
    public string Term { get; set; } 
    public int Take { get; set; } 
    public int Skip { get; set; } 
} 

public partial class ThingService : Service 
{ 
    public object Get(ThingList req) 
    { 
     var query = this.Things // from somewhere 

     if(!string.IsNullOrEmpty(req.Term)) 
      query = query.Where(x => x.Name.Contains(req.Term)); 

     if(req.Skip > 0) query = query.Skip(req.Skip); 
     if(req.Take > 0) query = query.Take(req.Take); 

     return query.ToList(); 
    } 

} 
+0

현재 제가 가지고있는 해결책입니다. (StartsWith) 또는 더 복잡한 OR 쿼리를 사용하여 검색 쿼리를 수행하려는 경우에는 어떻습니까? –

0

같은 갔다 더 best way 없습니다 서비스 용 API를 설계하는 것이지만 목표는 가능한 한 설명적이고 사용자에게 친숙해야하므로 클라이언트는 요청 DTO를보고 서비스가 수행하는 작업을 정확하게 결정할 수 있습니다.

일반적으로 서비스는 응집력이 있어야하며 클라이언트의 컨텍스트를 소비하는 컨텍스트와 관련이 있어야합니다. 예를 들어 해당 필드/기능을 추가하면 이미 해당 서비스를 사용하고있는 기존 클라이언트에 유용 할 수 있습니다.

결과 집합 검색 및 필터링은 추가 된 모든 필드/기능이 대상 결과 집합을 필터링하는 좋은 예입니다.

서비스를 설계 할 때 캐시 능력이 필요하다는 다른 문제, 즉 장기 캐시 가능 결과를 단기 캐시 불가능 정보와 분리합니다.

관련 문제