2010-09-18 6 views
27

Das Netz scheint voller Vergleiche zwischen Velocity und FreeMarker zu sein, und sie scheinen einigermaßen äquivalent zu sein. Aber es scheint fast keine Vergleiche zwischen StringTemplate und FreeMarker zu geben!Was sind die Hauptunterschiede zwischen StringTemplate und FreeMarker?

Also, was sind die Hauptunterschiede zwischen StringTemplate und FreeMarker?

Meine Verwendung für sie wäre HTML-Seiten nur zu generieren. Von den beiden hätte ich erwartet, dass FreeMarker die geeignetere und leistungsstärkere ist, wie es am häufigsten scheint - aber durch einen kurzen Blick scheint es, dass StringTemplate tatsächlich geeignetere Funktionen hat!

Es wäre toll, wenn jemand, der beides genutzt hat, Zeit hätte, sich zu äußern - für die konkreten Einzelheiten kann ich einfach die Dokumentation Seite an Seite lesen, aber ich möchte etwas, mit dem ich anfangen kann.

+0

Eine schnelle Erklärung! Ich bin nicht an den offensichtlichen Unterschieden interessiert - dass StringTemplate funktional ist und keine Schleifen usw. hat und FreeMarker fast eine vollständige Programmiersprache ist! Ich interessiere mich für konkrete Feature-Unterschiede, die während der Nutzung entstehen - wo eins leicht mit dem einen möglich ist, aber wirklich schwer mit dem anderen. – Nakedible

Antwort

29

I ST entworfen jGuru nach krank des "Code in Vorlage" -Modell von JSP zu bauen. Velocity und Freunde (d. H. Jeder andere Motor, denke ich) geben dir mehr Power als du brauchst. Ich habe im Wesentlichen vier Features benutzt, um jGuru.com zu bauen (wie in der Zeitung beschrieben). Mehr Features sind unnötig und führen dazu, dass Sie Ihr Modell in die Vorlage einbinden. Wenn Sie einen einmaligen Prototyp bauen, ist das in Ordnung und jeder Motor ist in Ordnung. Code in Vorlagen ist in diesem Fall in Ordnung, da Sie sich nicht um die Wartung kümmern.

Eine andere Sache, die Leute zu ignorieren scheinen: Wie zum Teufel kann ein Grafikdesigner Code in Vorlagen lesen? Sie können nicht. Also, wie können sie dann an den Vorlagen arbeiten? Selbst wenn Sie die Reihenfolge einiger Elemente ändern, kann das Modell beschädigt werden. Sie brauchen wirklich die Trennung, um im kommerziellen Umfeld zu arbeiten, es sei denn, Sie wollen eine Website, die wie ein Coder aussieht, baute das HTML;)

+3

Sie wissen nicht genug über ST, um kommentiert zu werden! ;-) Aber im Ernst, ich war mehr interessiert an den * anderen * Features, neben der Model-View-Trennung. Stuff wie Template Vererbung, die in ST aber nicht in FM vorhanden ist, zumindest nicht auf die gleiche Weise. Es scheint sehr merkwürdig, dass niemand StringTemplate beim Vergleich von FreeMarker, Velocity oder gar XSLT in Betracht zieht. – Nakedible

+0

hiya. yeah, Vererbung ist wichtig, um doppelte Vorlagen zu vermeiden. Ich benutze es umfassend in der ANTLR-Code-Generierung. Ich habe grundlegende Java-Vorlagen zum Generieren von Parsern. Wenn Sie Bäume wollen, muss ich Baumkonstruktionscode injizieren und die gesamte Java-Gruppe duplizieren. Wenn Sie -debug einschalten, muss ich Debug-Ereignis-Trigger injizieren. Manchmal beides! Mit Vererbung können Sie den Unterschied zwischen einfacher Java-Ausgabe und Java-Ausgabe mit Debug/Tree-Aktionen beschreiben. –

+3

Vererbung ist die Sache, die ST verführt! Ansonsten mag ich den übermäßig strengen mvc nicht, da wir keine mythischen Grafikdesigner haben, die MVC-Änderungen nicht widerstehen können und sehr einfache VTL nicht verstehen können. –

6

Der Hauptunterschied besteht darin, dass StringTemplate die Trennung von Modell und Ansicht strikt durchsetzt und Sie keine Logik in die Templates einfügen können. FreeMarker ermöglicht es Ihnen, Logik voll in die Templates zu legen. Dies macht es zumindest am Anfang schwieriger verwenden, aber es ist skalierbarer. Wenn Sie beispielsweise Code generieren und keine Logik in den Templates haben, ist die Generierung eines anderen Ports für eine andere Sprache weniger mühsam, da Sie die Logik in keiner Vorlage replizieren müssen.

Es gibt a paper von Terence Parr, die die Vorteile von Model-View Trennung erklärt

+1

Danke, aber lies meine Klarstellung zu der Frage - die Antwort hat mir nicht wirklich etwas gesagt, was ich nicht schon wusste. – Nakedible

+0

Papierverbindung ist jetzt kaputt –