Widoki zagnieżdżone, layout 1. Wprowadzenie Repozytoria danych Identyczne operacje na danych często się powtarzają np. pobierz książkę. Jeśli zapytanie realizowane jest za każdym razem w metodzie kontrolera to uzyskujemy dużo powtórzeń tego samego kodu. Ażeby temu zapobiec wydziela się osobną klasę odpowiadającą za dostęp do danych. Jej plusy to: Redukcja powtórzeń kodu odpowiadającego za dany rodzaj danych (łatwiej zapanować nad kodem w dużych wieloosobowych projektach). Wszystkie operacje na kolekcji w jednym miejscu (łatwiej coś dopisać lub zmienić). Możliwość podziału pracy (wydzielona osoba odpowiadająca za dostęp do danych np. pisze zapytania SQL dostarczając pozostałym już tylko obiekty). W MVC klasy odpowiedzialne za operacje na danych możemy umieszczać w katalogu Models. Warto również opatrzyć je dopiskiem Repository. /Models/{nazwa}Repository.cs Jest to zwykła klasa, która odpowiada za operację na danych. W kontrolerach tworzy się obiekt tej klasy i korzysta z jej iterfejsu. W naszym przykładzie mamy dwa modele i dwa repozytoria: Model mieszkania
Repozytorium Mieszkań Model mieszkańca
Repozytorium mieszkańców
Nasze repozytoria jednocześnie przetrzymują dane. Dodatkowo w przykładzie posiadamy dwa kontrolery dla mieszkań i mieszkańców. Kontroler mieszkań
Kontroler lokatorów Wszystko ładnie rozdzielone. Uwaga 1. Zauważcie, że lokatorzy nie są bezpośrednio powiązani z mieszkaniami np. przez umieszczenie ich w liście. Natomiast są powiązani poprzez id mieszania. Uwaga 2. Guid jest zmienną generująca i przetrzymującą unikatowy numer seryjny, na podstawie którego możecie rozróżnić obiekty. Do wygenerowania unikalnego Guida należy użyć metody: Guid.NewGuid()
2 Wprowadzenie zaawansowane wykorzystanie widoków Do tej pory używaliście-tworzyliście pojedyncze widoki pod każdą metodę-akcję kontrolera. W rzeczywistości można wykorzystywać dodatkowe widoki dla pojedynczych elementów strony. Takimi elementami są np. paginacja, logowanie, status. Powtarzają się na wielu stronach, ale nie są głównym kontentem, warto wtedy je umieścić w osobnych widokach, aby nie powtarzać kodu. Dodatkowo dzięki takim zabiegom mamy większą kontrolę nad kodem, łatwiej modyfikować stronę zachowując spójność. Można je przeplatać, czyli w jednym widoku odwołacie się do kilku innych. Często spotykanym elementem może być drobny widok dla pojedynczego obiektu np. domu. W przypadku wyświetlania listy domów ten pojedynczy widok może zostać wywołany wielokrotnie. W MVC rozróżniono 3 rodzaje widoków: Normalny ten który dotychczas używaliście, z modelem lub bez, dedykowany pod metody kontrolerów. Domyślnie View {controller} {action} Layout okalający normalne widoki. W nim znajduje się całość kodu html. Widoki tego typu nie posiadają modeli danych i są umieszczane w katalogu View Shared. Domyślny layout jest zdefiniowany w pliku View _ViewStart.cshtml
Partial widoki częściowe podobnie do normalnych z modelem lub bez, jednakże nie są przypisane kontrolerom. Znajdują się w katalogu View Shared razem z layoutami. W naszym przykładzie stworzono widok partial dla modelu mieszkania ponieważ będzie się on nam powtarzał wielokrotnie. Nazwany on został z dopiskiem Partial dla rozróżnienia.
Dodając nowy widok zaznaczono, że jest on typu partial i wybrano użycie szablonu Details FlatPartial Uwaga 1. Od tego momentu możemy tego widoku używać dowolnie w widokach. Uwaga 2. Pozostałe widoki dla kontrolera mieszkań też można tworzyć z wyborem szablonu.
Widok flat/index
Widok flat/edit Widoki kontrolera mieszańców wykorzystują widok częściowy mieszkania. Widok Resident/index.!!!Użyto widoku częściowego.
Widok Resident/Edit
Zadanie Rozszerzyć aplikację z poprzednich zajęć. Zaktualizować widoki. Stworzyć widok paginacji w oparciu o layout paginacji bootstrapa. Paginacja ma za zadanie wyświetlać tylko część elementów na liście. Czyli klikając na 2 stronę ma wyświetlić nam od 10 elementów, zaczynać od elementu o indeksie 2x10. Z listy możecie wyłuskać taki fragment przez zapytanie. list.skip(2*10).take(10) http://getbootstrap.com/components/#pagination Dla przypomnienia, aplikacja ma służyć do zarządzania biblioteką. Podstawową funkcjonalnością jest wyświetlanie i dodawanie książek do katalogu oraz dodawanie do nich autorów. Dodatkowo aplikacja powinna pozwalać wyszukiwać i usuwać pozycje z katalogu.