2010-09-30 11 views
7

Czy są jakieś aktualne artykuły porównujące JSF 2 i Tap 5? Wszystko, co wydaje mi się znajdować, to porównywanie JSF 1.2 i Tap4.Java Server Faces 2.0 lub Tapestry 5.2?

Czy ktoś ma jakiekolwiek doświadczenie z T5 lub JSF2 i czas na ewangelizację jednego lub drugiego?

Poszukuję ram dla szybkiego rozwoju w Javie, na szczycie Hibernate i mySql.

Inne akceptowalne skany sprzedaży, ale JSF2 i T5 są obecnie naszymi najlepszymi ofertami.

+0

ja krótko używane JSF2. To lepsze niż JSF 1.2.Ale to nie jest żadna zachęta i odmawiam ewangelizacji JSF, więc nie mogę zaoferować ci prawdziwej odpowiedzi (stąd komentarz). Ale jak powiedziałeś: "Szukam szkieletu do szybkiego rozwoju w Javie, na szczycie Hibernate i mySql" ... Czy spojrzałeś na Grails? To Groovy, zejście do Javy, kiedy potrzebujesz, prosty MVC i ORM na Hibernate. – dannywartnaby

+1

Zagraj dzisiaj w wersji 1.1RC1. – sirmak

Odpowiedz

8

Podejmując swoją ofertę i pitching innego Framework:

Jeśli chcesz naprawdę szybki rozwój następnie należy spojrzeć na Play Framework.

Użyłem JSF/Richfaces/Seam/Hibernate itp. I powiedziałbym, że używanie gry więcej niż podwaja wydajność. Nie ma cykli wdrażania. Więc nie przestój programisty. Ma zapakowane JPA/Hibernate i wiele wtyczek, które rozszerzają jego funkcjonalność w innych kierunkach.

Podoba mi się również to, że dzięki temu twoje strony są tak lekkie. Moim największym problemem z JSF była zawsze waga stron (niepotrzebne identyfikatory, wiele tabel, stan klienta itp.).

Poświęć trochę czasu i obejrzyj webcast.

+1

Play wygrał DevDerpy, wyprzedził zespoły asp.net, ruby, php. Play jest najlepszą platformą WWW Java, jaką kiedykolwiek widziałem, jest kompletnym stosem i ma również obsługę pierwszej klasy scala. System wtyczek i modułów, system testowy, auto kompilacja, reszta, buforowanie, logowanie, obsługa webservice, jpa, moduł mongo, moduł guice i sprężyna, system szablonów groovy, super raportowanie błędów, najprostszy framework, którego nie możesz uwierzyć, crud/admin/secure modules , wersja bazy danych, ... jest prawie idealna. – sirmak

+1

Mam zamiar to zaakceptować, ponieważ Play jest bardzo fajny. – Instantsoup

+0

Uwielbiam także grać w ramy. Bardzo łatwo napisać usługę odpoczynku. Moja strona klienta ma tylko Jquery/Javascript, który wykonuje wywołanie .ajax, aby uzyskać tekst json. –

3

Użyj JSF 2, szczególnie jeśli korzystasz z funkcji Java EE 6. Jeśli chcesz mieć fajny interfejs, spróbuj Primefaces.

Zgodnie z twoim wymaganiem, ważną rzeczą do rozważenia jest to, że używasz MySQL i to wszystko. Dlatego też, jeśli pod innym kątem. Używasz JPA2 (a twój dostawca utrwalania jest w tym przypadku Hibernacja). Dzięki takiemu podejściu możesz szybko bardzo łatwo "zamienić" swój dostawca trwałości lub bazę danych, z której korzystasz.

Wygląda jak Java EE 6 rozwiązuje problem.

24

Pracowałem głównie z Tapestry 5 w ciągu ostatnich kilku lat; Nie będę jednak ewangelizować. Wybór dobrej strony internetowej jest z pewnością dobrym pomysłem, ale zazwyczaj nie jest to twój główny problem.

listę dobrych i złych rzeczy z górnej części głowy:

  • Tapestry 5 ma dość strome początkowy krzywej uczenia się. Wszędzie dzieje się magia i metaprogramming. Można argumentować, że jest to przesada w stosunku do konfiguracji.

  • Proste rzeczy są bardzo proste do zrobienia, trudniejsze rzeczy wymagają szczegółowego zrozumienia, jak działa Tapestry 5 i mogą być trudne, jeśli nie (jeszcze).

  • Uwielbiam przeładowywać na żywo. Zmieniasz coś w komponencie T5 lub szablonie i widzisz to od razu. Naprawdę przydatne, gdy twoja aplikacja robi dużo rzeczy i bierze 30s +, by zacząć w Jetty.

  • Tapestry nie obsługuje dynamicznych struktur strony.Zazwyczaj nie stanowi to problemu, ale jeśli tworzysz jakieś rozwiązanie portalowe, w którym ludzie mogą indywidualnie układać komponenty, nie używaj Tapestry. Gobelin jest dla struktur statycznych, które radzi sobie naprawdę dobrze.

  • Tapestry ma piękne adresy URL. package/page/${param1}/${param2} ...

  • Tapestry używa właściwych czasowników HTTP do robienia rzeczy. Łącze to GET, przesłanie formularza to POST, wzorcem jest post-redirect-get.

  • Społeczność gobelinów nie jest zbyt duża. Poza statkiem Howarda Lewisa jest kilku innych wykonawców, ale nic takiego jak wsparcie Wicket nie ma. W ten sposób, Tapestry rozwija się raczej powoli.

  • Podejście gobelinu do szablonów (oprzyrządowanie kodu HTML z typami i identyfikatorami) jest jednym z lepszych, jakie widziałem, ale nie prowadzi aż tak daleko jak Wicket w utrzymywaniu kodu poza kodem HTML. Z drugiej strony pliki klas są mniej szczegółowe. Mimo to, myślę, że sposób Wicket jest lepszy.

  • Tapestry jest nieco niedostatecznie udokumentowane.

Lubię Tapestry bardzo dużo, myślę, że można być bardzo produktywnym z nim, a ja zawsze chętnie uczestniczą w projektach, w których jest ona wykorzystywana.

Chciałbym jednak również doradzić, aby sprawdzić Wicket. Wydaje się, że zyskał większą przyczepność niż Tapestry i rozwiązuje niektóre problemy mniej magicznie, ale z podejściem zdroworozsądkowym.

(Użyłem tylko krótko JSF 1, który uznałem za całkowicie oderwany od wszystkiego, co zrobił: zawijanie każdego żądania w POST (co łamie podstawową funkcjonalność sieci) przy użyciu stron JSP, ale wymaga użycia specjalnych znaczników na wszystko, nawet zwykły HTML ... Czytałem, że wiele poprawiło się w obozie JSF, ale nie mogę powiedzieć, że już nigdy na niego nie spojrzałem.)

+0

Och, anonimowe downvotes na wszystkie odpowiedzi, które nie mówią "użyj JSF i STFU" lub "spójrz na tę płomień T5". Westchnienie. – Henning

+0

+1, ponieważ nie zasługiwały na przegraną. Dziwne. – Damo

+0

Czy magia Tapestry nie jest przerażająca? Co jeśli napotkasz problem, czy łatwo jest go rozwiązać, gdy masz do czynienia z dużą ilością magii? –

4

Jestem bardzo zadowolony z Tapestry. Jest to podejście inne niż to, do czego większość ludzi się używa. Używa tego samego paradygmatu co WebObjects (na czym opiera się sklep iTunes).

Tapestry wykonuje bardzo dobrą robotę polegającą na minimalizowaniu ilości kodu, który należy napisać, aby wykonać zadanie. To świetnie, gdy już wiesz, co robisz, ale na początku może to być frustrujące, gdy uczysz się konwencji nazewnictwa, ponieważ niektóre rzeczy wydają się działać w magiczny sposób, a inne rzeczy nie, ponieważ nazwałeś coś złego.

Jedną z moich ulubionych rzeczy na temat Tapestry jest to, jak mało jest wymagane XML. Na przykład, jeśli utworzysz obiekt Hibernuj, umieść go w pakiecie com.example.entities i nadaj mu adnotację @Entity. Nie jest wymagana żadna inna konfiguracja - bez XML, bez dodawania nazwy klasy do pliku gdzieś itp.

Gorąco polecam rzucić okiem na rzeczywisty kod, aby zobaczyć, co myślisz. Oto kilka sugestii:

wookicentral.com/ github.com/spreadthesource/wooki

tapestry.zones.apache.org:8180/tapestry5-hotel-booking/ github.com/ccordenier/tapestry5 -hotel-rezerwacja

Zobacz także stronę JumpStart. Zawiera szereg przykładów wraz z kodem pokazującym dokładnie, jak korzystać z większości różnych komponentów.Zawiera także aplikację punktu początkowego, która oferuje funkcje zarządzania użytkownikami, jeśli chcesz na niej bazować.

jumpstart.doublenegative.com.au/jumpstart/

Sprawdź również odnowionej dokumentację Tapestry. To nie jest zamieszczona na stronie głównej jeszcze, ale to jest już bardzo duży krok naprzód:

people.apache.org/~uli/tapestry-site/

6

Sprawdź moją prezentację JSF 2.0 vs. Tapestry 5: A head-to-head comparison na Jazoon 2010 Może to pomóc w podjęciu decyzji.

Jako użytkownik tkaniny z nadrukiem Radziłbym wybrać Gobelin, ale myślę, że najlepszym sposobem, aby zdecydować, jest próba. Potrzebujesz więcej aplikacji demonstracyjnych?

https://github.com/drobiazko/tapestry5inaction/tree/master/tlog

Najważniejszym Tapestry 5 cechą dla mnie jest elastyczność ram. Możesz zastąpić prawie każdy fragment kodu wewnątrz rdzenia Tapestry, dzięki Tapestry IoC.

+0

Jak to może pomóc każdego dnia deweloperowi? Nie sądzę, że programista, który chce korzystać z tej struktury, naprawdę musi przesłonić części szkieletu. Czy on? –

5

Nie patrz na mnie za bezstronną opinię ... Gobelin jest moim życiem od kilku lat i nadal go kocham.

Krzywa uczenia się staje się coraz mniej stroma, dokumentacja szybko się poprawia, a książka Igora jest tuż za rogiem.

Niektóre z rzeczy, które mylą ludzi, to po prostu brak dokumentacji; na przykład konwencje nazewnictwa są opcjonalne, zawsze jest bardziej jawna konfiguracja (w postaci adnotacji metod), z której niektórzy ludzie czują się bardziej swobodnie.

Aby rozwiązać kilka punktów Henning: szablony elementów

Tapestry są zgodne z projektem, statyczne (i to jest bardzo ważne, aby skalowalności gobelin i clusterablity historia). Jednak dodatek będący częścią mojej biblioteki TapX obsługuje dynamiczne zewnętrzne szablony, które wypełniają lukę.

Ponadto, jeśli chcesz zachować swoje szablony maksymalnie zapasowe, można to zrobić zbyt, takich jak:

< postaci T: id = "MyForm" >

... w szablonie, z resztą w klasie Java:

@Component (parametry = { "target = strefa", "clientValidation = plama", "context = klient", "zabezpieczyć = true") prywatny Formularz myForm;

.... innymi słowy, wszystkie określone treści z Gobelinu z szablonu i do kodu. Nie jest to idealne rozwiązanie dla trywialnych komponentów (więcej przełączania się pomiędzy szablonem a źródłem Java), ale świetnie nadaje się do utrzymywania światów ładnych i oddzielnych.

+0

"Szablony komponentu Tapestry są z założenia statyczne (i jest to bardzo ważne dla skalowalności i historii klastra Tapestry)" - 1) Co dokładnie masz na myśli przez "statyczny"? 2) Jak dokładnie pomaga to skalowalność i klastrowanie? – Dima

+0

Porównanie HybridJava i Tapestry: http://hybridjava.blogspot.com/2011/03/hybridjava-vs-tapestry.html – Dima