Wpis z mikrobloga

#programowanie #java #angularjs #spring #mvc

Normalna aplikacja w Spring MVC jest w architekturze MVC:
- model: klasy POJO javowe,
- kontroler: klasy javowe z adnotacją Controller,
- widok: pliki JSP (czy tam jakoś ianczej np. Apache Tiles).

A jaka jest architektura jak używam REST-a? Springiem wystawiam dane w JSON, a AngularJS mi pobiera. To też jest MVC. Tylko że to chyba jakieś podwójne MVC.

Po stronie serwera (w Springu):
- model: klasy POJO javowe,
- kontroler: klasy javowe z adnotacją Controller,
- widok: dane w formacie JSON (no bo to "wypluwa" mi Spring) lub cała aplikacja w AngularJS lub same widoki HTML w Angular JS,

Po stronie klienta (w AngularJS):
- model: dane pobrane z serwera w JSON lub obiekty z AngularJS (które są automatycznie tworzone na podstawie pobranego JSON-a),
- kontroler: angularowe kontrolery (funkcje w AngularJS),
- widok: widoki HTML (pliki szablonów).

Dobrze myślę? I mogę to nazwać "podwójne MVC"? Wiem, że tak się robi, ale jak nazywa o opisuje się taką architekturę? Bo zwykłe MVC jest oklepane i masa materiałów, a do tego nie mogę znaleźć nic konkretnego.
  • 17
- widok: pliki JSP (czy tam jakoś ianczej np. Apache Tiles).

@mk321: Spring teraz propsuje thymeleafa, trzymałbym się tego. http://www.thymeleaf.org/doc/articles/thvsjsp.html

Poza kontrolerami powinieneś mieć warstwę serwisów, któreby zajmowały się warstwą biznesową (wyciąganie danych, ew. obróbka itp.) Kontrolery powinny być jak najchudsze.

Obczaj sobie oficjalny tutorial: https://spring.io/blog/2015/01/12/spring-and-angular-js-a-secure-single-page-application
@MattePRL: tak, wiem o Thymeleaf (Tiles tylko jako przykład podałem). O serwisach też wiem (to wywołuję sobie w kontrolerach). Tą "starą" architekturę znam.

Chodzi mi o nowe podejście (z REST, webserwisem). Czy pojęcie MVC nadal można do tego stosować? Chyba tak. Tylko właśnie co czym będzie w tym podejściu? Tak jak to opisałem? Po stronie Springa widokiem jest JSON czy cała aplikacja AngularJs?
@mk321: Tak, dokładnie tak. Zamiast renderowania htmla renderujesz jsona na podstawie swoich struktur danych :)

Poczytaj sobie o JsonView w Jacksonie. Pozwoli Ci to kontrolować jaka część modelu zostaje wyrenderowana w danym endpoincie. Eliminuje to potrzebę DTO, który jest uważany za antywzorzec.
@MattePRL: używam Jacksona (w sumie to sam wszystko robi za mnie, tylko adnotacje dodaję). Tylko czy JSON może być uznany jako widok? Przecież to są dane dla innej aplikacji, a nie dla człowieka. No ale z drugiej strony co to za różnica.

Tu coś znalazłem na ten temat: http://blog.jhades.org/developing-a-modern-java-8-web-app-with-spring-mvc-and-angularjs/
Jest kawałek jakiegoś schematu, ale słaby podział (bo podzielone już na warstwy, to i zwykłe MVC można podzielić inaczej na DAO, serwisy,
@mk321: Zauważ, że w takim wypadku masz dwie aplikacje: DataSource (vel serwer) i klienta (vel apka angularowa). Co jeśli oprócz angulara postawimy apkę na iosa, androida i moją wagę łazienkową?. Powstanie nam MV(4)C? Nie. Widokiem dla aplikacji serwerowej jest json, tak jak dla angulara jest html.

Ale zasiałeś we mnie ziarnko zwiątpienia ( ͡° ͜ʖ ͡°)
Nie mam siły się już przebijać przez to, ale rzuć okiem
@MattePRL: w sumie racja. Mam dwie aplikacje i w każdej jest MVC. Tego chciałem się trzymać, ale...

Ciągnąć to co zacząłem wyżej...

https://pl.wikipedia.org/wiki/Model-View-Controller

Widok – opisuje, jak wyświetlić pewną część modelu w ramach interfejsu użytkownika.


JSON chyba średnio jest interfejsem użytkownika, więc według tego nie może być uznany jako widok.

Ale jak poczytamy dalej: https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
No to jest, że widok to po prostu wyjście dla użytkownika. W tym wypadku użytkownikiem jest
@MattePRL: za słaby z angielskiego jestem, żeby takie pytania zadawać. Na razie szczytem moich językowych umiejętności jest zadania pytania na stackoverflow, w którym nie muszę dużo opisywać, bo kod sam się opisuje.

@kmicolo: tego chyba będę się trzymał.

Tylko czy masz pewność, w aplikacji serwerowej (w sumie to webserwisie REST) jest widok (tzn. czy jest nim JSON)? Bo jak jest, to znaczy, że klientem, który korzysta z widoku nie musi
@mk321: tak, json to widok. Tak jak xml, html, plaintext i zserislizowane dane. To jest api restowe. A angular to consumer api. Relacja serwer-klient. Klient to nie tylko osoba która coś kupuje. Tak samo przeglądarka to klient http.
@mk321: Ja bym się nad tym specjalnie nie zastanawiał. Nie ma „czystego” czy też „poprawnego” mvc w appkach webowych. I jak sam zauważyłeś, punkt widzenia zależy od punktu siedzenia.

MVC może być pojedynczymi klasami po stronie serwera, funkcjami w JS czy całymi warstwami. Rozmydlone pojęcie. Nic nie wnosi, w niczym nie pomaga, nic nie precyzuje.

Pierwotne MVC dotyczyło pomysłu na projektowanie GUI w aplikacjach okienkowych. Dużo małych zestawów obiektów, reprezentujących pojedyncze
@MacDada: MVC to podstawa aplikacji webowych. MVC .NET czy Spring MVC. Więc ten skrót musi mieć duże znaczenie.

Daj więcej info o tych aplikacjach okienkowych w MVC. Jak to wyglądało? Chodzi o kontrolki (np. te w .NET lub te w Swingu JButton itd)?
MVC to podstawa aplikacji webowych.


@mk321: No właśnie nie. To marketing. Zajumane słowo, bo taka była moda :) W gruncie rzeczy to Railsy ją zapoczątkowały, bo kazały sobie stwarzać trzy katalogi na „modele”, „widoki” i „kontrolery”. Ponieważ Railsy osiągnęły spory sukces (spopularyzowały się), inni zaczęli kopiować.

Daj więcej info o tych aplikacjach okienkowych w MVC.


* https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller#History
* http://c2.com/cgi/wiki?ModelViewController
* https://www.youtube.com/watch?v=WpkDN78P884
@Gotomb: opisuję to w pracy inżynierskiej. Mam mieć opisaną architekturę. Dla niektórych będzie nie do wyobrażenia, że aplikacja webowa nie jest w MVC. Wytłumaczenie że korzystam że Spring MVC i to nie jest MVC będzie trudne.

@MacDada: masz na potwierdzenie swoich słów jakieś źródło? Nie to, że ci nie wierzę, ale przyda mi się do pracy. Bo twierdzenie, że twórcy Springa i .NET-a błędne używają określenia MVC może być bardzo
błędne używają określenia MVC


@mk321: Może i nie błędnie – termin po prostu został zaadaptowany także przy appkach webowych. Ale IMHO jest to naciągane – tzn są lepsze abstrakcje, o które można oprzeć aplikację webową, niż na siłę próbować robić MVC.

Pierwotnie chodziło o komponenty GUI, ale słowa zmieniają znaczenie.