Różnica między Apache Gobestry i Apache Wicket

Apache Wicket ( http://wicket.apache.org / ) i Apache Tapestry ( http://wicket.apache.org / ) są zarówno zorientowanymi na komponenty frameworkami wwws - W przeciwieństwie do frameworków opartych na działaniu, takich jak Stripes - przez Apache Foundation. Oba umożliwiają budowanie aplikacji z komponentów w Javie. obie wyglądają bardzo podobnie do mnie .

Jakie są różnice między tymi dwoma frameworkami? Ma ktoś doświadczenie w obu? Konkretnie:

  • Jak jest ich wydajność, jak można dostosować obsługę Stanów, czy można ich używać bezstanowo ?
  • Jaka jest różnica w ich modelu składowym?
  • jakie wybrać aplikacje?
  • Jak integrują się z Guice, Spring, JSR 299?

Edit : przeczytałem dokumentację dla obu i użyłem obu. Na pytania nie da się wystarczająco odpowiedzieć po przeczytaniu dokumentacji, ale z doświadczenia z ich używania przez jakiś czas, np. jak używać Wicket w trybie bezpaństwowym dla stron o wysokiej wydajności. Dzięki.

Author: Jonas, 2009-03-18

8 answers

Niektóre istotne różnice jak je widzę:

  • Tapestry używa półstatycznej strony struktura, gdzie można pracować z uwarunkowania i pętle do osiągnięcia dynamiczne zachowanie. Wicket jest całkowicie dynamiczny; można załadować komponenty dynamicznie, wymień je w czasie wykonywania itp. Konsekwencje to jest to, że gobelin jest łatwiejsze do optymalizacji, a ta furtka jest bardziej elastyczny w użyciu.
  • obie ramy są mniej więcej równie wydajne w wykonanie, ale Wicket polega na strona serwera storage (domyślnie the bieżąca strona w sesji i przeszłość strony w "pamięci podręcznej drugiego poziomu", która jest domyślnym plikiem tymczasowym w pliku system). Jeśli ci to przeszkadza, pomyśl o tym, ile jednoczesnych sesji spodziewasz się, że w godzinach szczytu i Oblicz z say ~100KB na sesję (który jest prawdopodobnie na wysokiej stronie). Oznacza to, że można uruchomić z grubsza obsługa 20K sesji równoległych dla 2GB. Powiedz 15k bo tego potrzebujesz pamięć także dla innych rzeczy. Z oczywiście, wadą przechowywania stan czy to będzie działać tylko dobrze z powinowactwem sesji, więc to ograniczenie podczas korzystania z Wicket. Na framework zapewnia środki aby zaimplementować bezpaństwowe strony, ale jeśli rozwijasz się w pełni bezpaństwowo aplikacje, które możesz rozważyć inne ramy.
  • celem Wicket jest wsparcie statycznego pisania w jak największym stopniu, podczas gdy Tapestry jest bardziej o zapisywanie wierszy kodu. Więc z Gobestry twoja baza kodu jest prawdopodobnie mniejsza, co jest dobre do konserwacji, a z Wicket, dużo jest wpisywane statycznie, co ułatwia nawigację z IDE i sprawdzanie za pomocą kompilatora, co również jest dobre do konserwacji. Coś do powiedzenia dla obu imho.

Przeczytałem już kilka razy, że ludzie myślą, że Wicket działa przez dziedziczenie dużo. Chciałbym podkreślić, że masz wybór. Istnieje hierarchia komponentów, ale Wicket wspiera również kompozycję poprzez konstrukcje takie jak IBehavior(na szczycie którego budowana jest np. obsługa Ajax Wicket). Na dodatek masz rzeczy takie jak konwertery i walidatory, które można dodać do komponentów, globalnie, lub nawet jako problem przekrojowy przy użyciu niektórych słuchaczy fazy zapewnia Wicket.

 41
Author: Eelco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-13 18:18:55

Poprawione po przestudiowaniu gobelinu 5.

Celem Wicket ' a jest próba uczynienia web development podobnym do desktopowego GUI jednym. Udało im się to zrobić naprawdę dobrze kosztem zużycia pamięci ( HTTPSession ).

Celem Tapestry 5 jest stworzenie bardzo zoptymalizowanego (dla procesora i pamięci) zorientowanego na komponenty frameworku internetowego.

Naprawdę dużą pułapką dla mnie była odpowiedź " Wicket obsługuje komponent stateless!"do argumentów "Wicket jest głodny pamięci". Podczas gdy Wicket rzeczywiście obsługuje bezpaństwowe komponenty, nie są one "przedmiotem rozwoju Wicket". Na przykład błąd w StatelessForm nie był naprawiany przez bardzo długi czas-zobacz StatelessForm-problem z parametrami po nieudanej walidacji .

  • IMHO korzystanie z Wicket jest nieco trudniejsze, dopóki nie zoptymalizujesz / dostroisz parametrów aplikacji internetowej
  • IMHO trudniej się uczyć jeśli masz zaprogramowane aplikacje internetowe i chcesz myśleć w zakresie przetwarzania wniosków
  • Tapestry 5 Automatycznie przeładowuje klasy komponentów jak tylko je zmienisz. Obie struktury przeładowują znaczniki komponentu.
  • wicket wymusza separację znaczników/ kodów , Tapestry 5 daje Ci tylko tę zdolność. Możesz także użyć mniej wyrazistej składni w Tapestry 5. Jak zawsze ta wolność wymaga więcej przestrog.
  • rdzeń Wicketa jest łatwiejszy do debugowania: komponenty użytkownika są oparte na dziedziczeniu, podczas gdy użytkownik Tapestry 5 komponenty są oparte na adnotacjach. Z drugiej strony, które mogłyby ułatwić przejście do przyszłych wersji dla gobelinów, a następnie dla Wicket.

Niestety Tapestry 5 tutorial Nie podkreśla, że przykład kodu Tapestry jak 'T:loop source="1..10"... to może być zła praktyka. Więc trochę wysiłku należy włożyć w pisanie Konwencji użytkowania gobelinów/ dobrych praktyk, jeśli twój zespół nie jest bardzo mały.

Moje rekomendacje :

  • Użyj Wicket gdy struktura stron jest bardzo dynamiczna i możesz sobie pozwolić na wydanie 10-200 KB pamięci HttpSession na użytkownika (są to przybliżone liczby).
  • użyj Gobestry 5 w przypadkach, gdy potrzebujesz bardziej efektywnego wykorzystania zasobów
 35
Author: Sergey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-15 11:08:26
 10
Author: Scott Swank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-02 08:35:43

Myślę, że Wicket jest prostszym frameworkiem w użyciu.

Ponadto, Wicket pozwala na przeładowanie klasy poprzez system wymiany hot-code IDE. To wszystko, co jest wymagane, aby Wicket uruchamiał zmodyfikowane wersje aktualnie uruchomionych klas aplikacji. Typowe ograniczenia dotyczą zastępowania hot-code, takie jak konieczność uruchomienia w trybie debugowania (Eclipse) i niemożność zmiany aspektów strukturalnych klasy (np. nazwa klasy, zmiana podpisów metod itp...).

 1
Author: Antony Stubbs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-18 07:00:54

Nie podoba mi się model programowania Tapestry i Wiem, że wielu deweloperów opuszcza Tapestry z powodu zbyt wielu zmian i niezgodności w rozwoju. Zobacz: http://ptrthomas.wordpress.com/2009/09/14/perfbench-update-tapestry-5-and-grails/

 1
Author: deamon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-16 11:00:56

Wicket to bardzo dobry framework internetowy. Najlepsze z tego co wiem. Używam go od wersji 1.3 i zawsze dostaję to, czego chcę. Wicket ma doskonałą integrację ze Springiem - wystarczy użyć adnotacji @ SpringBean w kodzie, aby wstrzyknąć dowolną wiosenną fasolę do swoich klas.

 0
Author: Alexey Sviridov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-23 07:05:16

Try http://incubator.apache.org/click /. To jest niesamowite java web framework. Niektórzy nazywają to "Wicket made right"; -)

 0
Author: Andrej Fink,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-16 10:47:15

Jak mówiłem, kiedy 4.1 było oficjalnym wydaniem stabilnym:

Powinieneś bardzo dobrze przyjrzeć się historii rozwoju gobelinu przed podjęciem decyzji o jego użyciu. Tapestry zrobił wiele niezgodnych aktualizacji, bez kontynuacji wsparcia starszych wersji. Poprawki do wersji 4.1 nie są już przetwarzane w rozsądnym terminie. Jest to moim zdaniem nie do przyjęcia dla oficjalnej wersji stabilnej.

Użycie gobelinu 5 oznacza:

Powinieneś zostać a committer; musisz nadążyć za wszystkimi nowymi wersjami, porzucić stare wersje tak szybko, jak to możliwe; utrzymuj stabilne wersje samodzielnie.

 0
Author: Stephan Eggermont,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-13 09:48:18