2010-05-13 8 views
5

나는 내가하려고하는 것에 대해 가장 우아한 해결책을 확신하지 못한다.NHibernate + Paging + Ordering

음악 목록을 나열하는 페이지가 있습니다. 수천 곡이 있으므로 일괄 적으로 20 개 페이지로 페이징되며 페이지 상단에 4 개의 링크가있어 이러한 목록의 순서가 변경됩니다.

속성 별 정렬은 Audio.AudioStats.NumComments 또는 Audio.Artist.NumProfileViews와 같은 다른 엔터티에있을 수 있습니다.

저는 저장소 패턴과 서비스 계층을 사용하고 있습니다. 내 컨트롤러는 서비스 레이어에만 액세스 할 수 있으며 서비스 레이어는 내 리포지토리에 액세스합니다.

페이징을 매우 쉽게 수행 할 수 있습니다. 현재 페이지와 페이지 크기를 데이터 영역에 전달하기 만하면되지만 사용자가 내 엔터티의 순서를 안전하게 결정할 수는 있습니다.

차이가있는 경우 S # arp Architecture 1.5.2를 사용하고 있습니다.

미리 감사드립니다.

답변

1

사용자의 욕구를 어떻게 든 order by 절에 매핑해야합니다.

아마 skip(n).take(m)과 같은 것을하고 있는데 orderby() 절도 필요합니다.

고정 된 (알려진) 가능성이있는 경우 해당 번호를 관련있는 orderby() 호출로 변환하는 열거 형 등으로 매핑 할 수 있습니다.

이것은 UI 레이어에서 속성을 노출하지 않고 리포지토리 레이어의 의도 (예 : Sortby.ArtistProfileViews 값 또는 기타) 만 전달한다는 것을 의미합니다. 그 의도가 도메인 객체의 속성에 어떻게 매핑되는지는 저장소 계층에서 격리됩니다.