2010-09-18 11 views
27

Sieć wydaje się być pełna porównań między Velocity i FreeMarker, i wydaje się, że są one w miarę równoważne. Ale wydaje się, że prawie nie ma porównań między StringTemplate i FreeMarker!Jakie są główne różnice między StringTemplate i FreeMarker?

Jakie są główne różnice między StringTemplate i FreeMarker?

Używam ich do generowania stron HTML. Spośród nich, oczekiwałbym, że FreeMarker będzie bardziej odpowiedni i sprawniejszy, co wydaje się bardziej powszechne - ale dzięki szybkiemu spojrzeniu wydaje się, że StringTemplate ma bardziej odpowiednie funkcje!

Byłoby wspaniale, gdyby ktoś, kto używał obu, miałby czas na komentowanie - z uwagi na specyfikę, mogę po prostu czytać dokumentację obok siebie, ale chciałbym, aby coś się zaczęło.

+0

Szybkie wyjaśnienie! Nie interesują mnie oczywiste różnice - StringTemplate jest funkcjonalny i nie ma pętli itp., A FreeMarker jest prawie pełnym językiem programowania! Interesują mnie konkretne różnice w cechach, które pojawiają się podczas użytkowania - gdzie jedna rzecz jest łatwo możliwa z jedną, ale bardzo trudna z drugą. – Nakedible

Odpowiedz

29

Zaprojektowałem ST zbudować jGuru po zachorowania na „kod w szablonie” modelu JSP. Prędkość i przyjaciele (tj. Każdy inny silnik, jaki myślę) dają ci więcej mocy niż potrzebujesz. Zasadniczo użyłem czterech funkcji do zbudowania jGuru.com (jak opisano w artykule). Więcej funkcji jest niepotrzebnych i prowadzi do zaplątania modelu w szablon. Jeśli budujesz jednorazowy prototyp, wszystko jest w porządku, a każdy silnik jest w porządku. Kod w szablonach jest w tym przypadku prawidłowy, ponieważ nie obchodzi Cię konserwacja.

Kolejna rzecz, którą ludzie zdają się ignorować: jak do diabła projektant grafiki odczytuje kod w szablonach? Nie mogą. Jak zatem mogą pracować na szablonach? Nawet zmiana kolejności niektórych elementów może spowodować uszkodzenie modelu. Naprawdę potrzebujesz separacji do pracy w środowisku komercyjnym, chyba że chcesz witryny, która wygląda jak koder zbudowany html;)

+3

Nie masz wystarczającej wiedzy na temat ST, aby komentować! ;-) Ale poważnie, ale bardziej interesowałem się * innymi * funkcjami, oprócz rozdzielenia widoku modelu. Rzeczy takie jak dziedziczenie szablonów, które jest obecne w ST, ale nie w FM, co najmniej nie w ten sam sposób. Wydaje się bardzo dziwne, że nikt nie wydaje się brać StringTemplate do rozważenia przy porównywaniu FreeMarker, Velocity, a nawet XSLT. – Nakedible

+0

hiya. tak, dziedziczenie ma kluczowe znaczenie dla uniknięcia powielania szablonów. Używam go intensywnie w generowaniu kodu ANTLR. Mam podstawowe, powiedzmy, szablony Java do generowania analizatorów składni. Jeśli chcesz drzew, muszę wstrzyknąć kod budowy drzewa i nie powielać całej grupy Java. Jeśli włączasz -debug, muszę wstrzyknąć wyzwalacze zdarzeń debugowania. Czasami oba! Dziedziczenie pozwala opisać różnicę między zwykłym wyjściem Java i wyjściem Java z działaniami debugowania/drzewa. –

+3

Dziedziczenie to rzecz, która kusi ST! W przeciwnym razie nie lubię zbyt surowego mvc, ponieważ nie mamy żadnych mitycznych grafików, którzy nie mogliby oprzeć się zmianom MVC i nie mogli zrozumieć bardzo prostego VTL. –

6

Główna różnica polega na tym, że StringTemplate ściśle egzekwuje separację widoku modelu i nie można umieszczać logiki w szablonach, a FreeMarker pozwala umieścić pełną logikę w szablonach. To przynajmniej na początku utrudni używać, ale jest bardziej skalowalny. Na przykład, jeśli generujesz kod i nie masz logiki w szablonach, generowanie innego portu dla innego języka jest mniej uciążliwe, ponieważ nie musisz replikować logiki w każdym szablonie.

Jest a paper z Terence Parr, która wyjaśnia korzyści z Model-View separacji

+1

Dzięki, ale przeczytałem moje wyjaśnienie na temat pytania - odpowiedź tak naprawdę nie powiedziała mi niczego, czego wcześniej nie wiedziałem. – Nakedible

+0

link do papieru jest teraz uszkodzony –

Powiązane problemy