Vaadin a Spring (Web) MVC

Wpis filozoficzny…

Ostatnio(czytaj gdzieś w tym kwartale) zostałem zapytany czy integracja Spring MVC z Vaadin ma sens. Odpowiedź w skrócie brzmi… to zależy.

Na Nie

Po pierwsze jeżeli przyjrzymy się temu co kryje się za pojęciem Spring MVC to odkryjemy, że tak na prawdę jest to Spring Web MVC z bardzo silnym naciskiem na Web. Vaadin nie jest typowym frameworkiem webowym i dlatego nie można stosować springowych rozwiązań wprost. Oczywiście da się, ale będzie to niezgrabna proteza, która pozbawi nas zalet zarówno Springa jak i Vaadin.
Lepszym rozwiązaniem jest samodzielna implementacja ViewResolvera, ale powiedzmy sobie szczerze to jest bardzo trudne. Trudność polega na niewebowym sposobie „myślenia” związanym z Vaadin. Znacznie lepszym jest sposób myślenia taki jaki mamy w przypadku aplikacji Swing/AWT/SWT. Zresztą powiedzmy sobie szczerze, Vaadin ma bliżej do Swinga niż do JSP/JSF/Inna technologia webowa. Dlatego też w przypadku Vaadin nie należy używać Springowego MVC wprost.

Na Tak

Używanie wzorca MVC jest bardzo, ale to bardzo dobrym pomysłem. Jest to jeden z tych wzorców, który powinien być stosowany wszędzie tam, gdzie aplikacja obsługuje więcej niż trzy scenariusze. Implementowany powinien być już na początku, a następnie schemat powinien być konsekwentnie powtarzany w całej aplikacji.
Problemem jest wymieszanie warstwy kontrolera i widoku właściwe dla aplikacji okienkowych. Dlatego też należy użyć Springa jako narzędzia do separacji widoku i kontrolerów. No właśnie… nie kontrolerów, a prezenterów. Tu dochodzimy do ważnego stwierdzenia. Zamiast wzorca MVC należy używać wzorca MVP, a Spring powinien służyć do wiązania widoków domeny i prezenterów domeny.
Jak dokładnie to zrobić będzie innym razem.

Podsumowanie

Spring tak, MVC nie. Po prostu wzorzec ten w przypadku aplikacji w Vaadin nie będzie spełniał swojej roli. Lepszym rozwiązaniem jest wzorzec MVP, który jest pewną mutacją MVC przystosowaną do środowiska okienkowego.

2 myśli na temat “Vaadin a Spring (Web) MVC

  1. Dzięki za odpowiedź.

    ps.
    Mam nadzieję, że nie trzeba będzie długo czekać na obiecany wpis:P

Napisz odpowiedź

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax