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:
Repozytorium Mieszkań
Nasze repozytoria jednocześnie przetrzymują dane. Dodatkowo w przykładzie posiadamy dwa kontrolery dla mieszkań i mieszkańców.
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:
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.
Widok flat/edit
Widoki kontrolera mieszańców wykorzystują widok częściowy mieszkania. Widok Resident/index. !!!Użyto widoku częściowego.
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.