Moja aplikacja BoardGamesNook jest napisana w C#, korzysta ze wzorca MVC i wykorzystuje framework Angular. Oznacza to, że jest rozdzielona na stronę backendową (logika biznesowa w C#) i frontendową (odpowiedzialną za wyświetlanie danych użytkownikowi). Poniżej widać drzewo solucji głównego projektu. Folder src zawiera pliki typescryptowe do obsługi żądań i htmlowe do wyświetlania danych.
Utworzony w backendzie przykładowy model Gamer
ma swoje odzwierciedlenie w części związanej z frontendem
Póki co obydwa modele się pokrywają, ale docelowo będą się różnić (np. użytkownik nie będzie musiał znać informacji o dacie utworzenia i edycji gracza).
W części backendowej istnieje GamerController, który zawiera 5 metod: Get(), GetAll(), Add(), Edit() i Delete() odpowiedzialne kolejno za zwrócenie informacji o graczu, o liście graczy, a także do dodawania, edycji i usuwania gracza.
Po kliknięciu na odpowiedni przycisk na stronie, wywołuje się odpowiednia metoda z pliku komponentu i odpowiednio zserializowany obiekt lub jego propercje zostają wysłana metodą GET lub POST do kontrolera. Na przykład po kliknięciu ostatniego przycisku z napisem Save wywoła się metoda save() z pliku gamer-detail.component.ts
W metodzie save() widzimy, że zostaje wywołana metoda update() z gamerService:
W metodzie tej wysyłamy w części body zserializowany obiekt gamer żadanie POST przez url „Gamer/Edit”, więc (zgodnie z routingiem) do metody Edit kontrolera Gamer.
Sami widzicie, że połączenie Angulara z MVC nie jest wcale aż tak trudne.
Dalsze plany to utworzenie obiektu Game i połączenie go z obiektem Gamer.
Podoba Ci się to, co tworzę? Chcesz dostawać informacje o:
– wydarzeniach, które organizuję lub wspieram (np. konferencje, meetupy, webinary)
– inicjatywach, które organizuję lub wspieram (np. GeekWeekWro, DevAdventCalendar)
– moich prelekcjach, kursach i szkoleniach
– wyróżnionych artykułach z mojego bloga
0% SPAMu, 100% informacji! Krótko i na temat.
Ciekawi mnie czy są już jakieś eleganckie sposoby, żeby współdzielić taki prosty (pod względem typów) model jak Twój „Gamer” między front-endem i back-endem. Pozwoliłoby to uniknąć definiowania go w dwóch miejscach („Don’t Repeat Yourself”). A może taki coupling front-endu i back-endu jest niepożądany? Muszę poszperać w internetach zanim zacznę klepać we własnym Angularze 🙂
PolubieniePolubienie
Niestety nie wiem nic o eleganckich sposobach – jeśli jakieś poznasz, to się koniecznie podziel:) Tak jak pisałam – prawdopodobnie będę traktować model w Angularze jak taki ViewModel z danymi przydatnymi tylko dla użytkownika.
PolubieniePolubienie
Pingback: Podsumowanie DSP2017 – programmer-girl