2010-05-13 6 views
5

Nie jestem pewien najbardziej eleganckiego rozwiązania tego, co próbuję zrobić.NHibernate + Paging + Zamawianie

Mam stronę, która zawiera listę utworów muzycznych, mogą być ich tysiące, więc są one stronicowane w partiach po 20, mam też 4 linki u góry strony, aby zmienić sposób, w jaki są one uporządkowane.

Sortowanie według właściwości może znajdować się na różnych elementach, takich jak Audio.AudioStats.NumComments lub Audio.Artist.NumProfileViews.

Używam wzorca repozytorium i warstwy usługi. Moje kontrolery mogą uzyskać dostęp tylko do warstwy usługi, a następnie warstwa usługi uzyskuje dostęp do moich repozytoriów.

Mogę dość łatwo wywołać stronicowanie, po prostu przekazuję moją bieżącą stronę, a rozmiar strony mojej warstwie danych ... ale jak mógłbym bezpiecznie pozwolić użytkownikowi decydować o kolejności moich podmiotów.

Używam architektury S # arp Architecture 1.5.2, jeśli to robi jakąkolwiek różnicę.

Z góry dziękuję.

Odpowiedz

1

Będziesz musiał zmapować pragnienia użytkowników do jakiegoś porządku przez klauzulę.

Prawdopodobnie robisz coś takiego jak skip(n).take(m), które będzie również wymagać klauzuli orderby().

Biorąc pod uwagę, że masz ustalony zestaw (znanych) możliwości, możesz odwzorować je na wyliczenie lub podobne, które następnie przetłumaczyć na odpowiednie wywołanie orderby().

Oznacza to, że nie ujawnia się właściwości w warstwie interfejsu użytkownika, a jedynie przechodzi przez cel do warstwy repozytorium (jako wartość Sortby.ArtistProfileViews lub coś podobnego). To, w jaki sposób zamiar jest odwzorowany na właściwości na twoich obiektach domenowych, jest izolowane w twojej warstwie repozytorium.