저장소에서 오는 제품 목록이 있습니다. 충분히 간단합니다. 이제 필터링 및 정렬을 추가하고 싶습니다. 저장소 내에서 효율성 향상이 일어나지 않으므로 저장소 외부에서 정렬이 발생할 수 있습니다 (추측). 우리가 염려하는 레코드 만로드하고자하므로 저장소 외부에서 필터링하는 것을 상상할 수 없습니다. 필자는 필터 델리게이트를 생성하여 저장소에 전달하려고한다고 생각합니다.필터링 및 정렬에 대한 간단한 저장소 질문
아래 코드는 의사 C# 코드입니다. 작동하는 코드는 정렬/필터링과 어떤 관련이 있습니까?
아래 정말 필터링 저장소에 대표단을 전달 중심으로 과정 :
가Product myProduct = Repo.GetProducts(filter);
(이 MS MVC를한다면,이 코드는 컨트롤러에 존재하는 것) :
설정 필터를 :
//TODO: Need filter class definition
var filter = new Filter(); // made up object class for now
filter.AddCondition(field, operator, value); // do this for each filter condition
filter.AddCondition(Product.Name, contains, "Hammer"); // Product.Name ?? (Example)
Product myProducts = Repo.GetProducts(filter); // the Product call **FILTER**
설정 일종의 :
// TODO: Need sort class definition
var sort = new Sort(); // another made up object class for now
sort.AddOrder(field, priority, sequenceUp) // Sequence enum is ascending/descending
sort.AddOrder(Product.Name, 1, ascending) // (Example) **SORT**
myProducts.AddSort(sort);
은 뷰 모델을 돌려줍니다
: 당신이 볼 수 있듯이
// Next part strips off unnecessary fields for view (Presentation model)
// So we are not sending a huge data model to the view (hopefully good)
// TODO: Replace string with Service? function to extract a miniProduct from Product
MiniProduct myMinis = MakeMiniProductsFrom(myProducts); // Service?
// Determine response type (XML, JSON, HTML View) and return appropriate data
// use "x-requested-by" as per Rob Conery noted below
if (Request.IsAjaxRequest()) return Json(myMinis);
else return View(myMinis);
,이 코드는 약간의 도움이 필요합니다. 나는이 작업을 할 수있는 클래스 코드 나 필터를 분류하고 외부 소스에 대한 링크를 찾고있다. 정렬과 필터링은 DDD와 디자인 패턴 내에서 표준적인 방법이므로 가정합니다. 제품이 평범한 전자 상거래 제품이라고 가정하십시오.) Rob Conery의 Ajax 노트는 here
입니다.
그렇다면 ORM이 POCO 클래스에 대한 정렬 및 필터링을 제공해야한다고 말하고 있습니다 (예 : 반복자 패턴 등을 사용하는 경우)? –
이상적으로는 그렇습니다. DB가이를 처리해야하기 때문에 ORM과 데이터 계층에서 정렬 및 필터링을 처리하기를 원합니다. IQueryable을 사용하면 실제 필터 + 정렬이 DB에 직접 매핑됩니다. –
예를 들어, Linq to Sql이 지원됩니다. 따라서 dc.Products.where (x => x.Name.contains ("Hammer"))를 사용하고 계속 추가 할 것입니다.내가 추가 필터를 가지고있는 한 wheres. 그래서 저장소 목록에 큰 foreach 문을 만들어 조건 목록을 받아 들여 .where() 메서드로 적용해야합니다. 정렬하는 한, 나는 같은 것을 할 것입니다. 오더 바이 (x => x.Name)? 내 대리자를이 컨트롤러로 구성한 다음 저장소 메서드의 매개 변수로 전달 하시겠습니까? –