2010-09-18 22 views
27

La rete sembra essere piena di confronti tra Velocity e FreeMarker, e sembrano essere ragionevolmente equivalenti. Ma sembra che non ci siano quasi paragoni tra StringTemplate e FreeMarker!Quali sono le principali differenze tra StringTemplate e FreeMarker?

Quindi, quali sono le principali differenze tra StringTemplate e FreeMarker?

Il mio utilizzo per loro sarebbe quello di generare solo pagine HTML. Tra i due, mi sarei aspettato che FreeMarker fosse il più adatto e più capace, come sembra a quello più comune - ma attraverso una rapida occhiata sembra che StringTemplate abbia in realtà caratteristiche più adatte!

Sarebbe bello se qualcuno che ha usato entrambi avrebbe avuto il tempo di commentare - per le specifiche attuali, posso solo leggere la documentazione fianco a fianco, ma mi piacerebbe qualcosa per iniziare.

+0

Un rapido chiarimento! Non sono interessato alle differenze ovvie - che StringTemplate è funzionale e non ha loop ecc e FreeMarker è quasi un linguaggio di programmazione completo! Mi interessano le concrete differenze di funzionalità che emergono durante l'utilizzo - dove una cosa è facilmente possibile con una, ma veramente difficile con l'altra. – Nakedible

risposta

29

ho progettato ST costruire jGuru dopo ammalarsi del modello "codice modello" di JSP. Velocità e amici (cioè ogni altro motore che penso) ti danno più potere del necessario. Ho usato fondamentalmente quattro funzioni per costruire jGuru.com (come descritto in carta). Altre funzioni non sono necessarie e ti portano a impigliare il tuo modello nel modello. Se stai costruendo un prototipo one-off, va bene e qualsiasi motore va bene. Il codice nei modelli è ok in questo caso poiché non ti interessa la manutenzione.

Un'altra cosa che la gente sembra ignorare: come diavolo può un grafico leggere il codice nei modelli? Non possono Allora, come possono lavorare sui modelli? Anche cambiare l'ordine di alcuni elementi può rompere il tuo modello. Hai davvero bisogno che la separazione funzioni in ambiente commerciale, a meno che tu non voglia un sito che assomigli ad un codificatore che ha costruito l'html;)

+3

Non sai abbastanza su ST per commentare! ;-) Ma seriamente, però, ero più interessato alle * altre * caratteristiche, oltre alla separazione della vista modello. Stuff come l'ereditarietà dei modelli, che è presente in ST ma non in FM, almeno non nello stesso modo. Sembra molto strano che nessuno sembri prendere in considerazione StringTemplate quando si confrontano FreeMarker, Velocity o anche XSLT. – Nakedible

+0

hiya. sì, l'eredità è fondamentale per evitare la duplicazione dei modelli. Lo uso estesamente nella generazione del codice ANTLR. Ho dei modelli Java, per esempio, per generare parser. Se vuoi gli alberi, devo inserire il codice di costruzione dell'albero e senza dover duplicare l'intero gruppo Java. Se attivi -debug, devo iniettare i trigger degli eventi di debug. A volte entrambi! L'ereditarietà consente di descrivere la differenza tra l'output Java semplice e l'output Java con azioni di debug/tree. –

+3

L'ereditarietà è la cosa che rende ST allettante! In caso contrario, non mi piace il mvc eccessivamente rigoroso, in quanto non abbiamo progettisti grafici mitici che non possano resistere alle modifiche MVC e non riescano a capire un VTL molto semplice. –

6

La differenza principale è che StringTemplate applica rigorosamente la separazione della vista modello e non è possibile inserire la logica nei modelli e FreeMarker consente di inserire la logica nei modelli. Ciò, almeno all'inizio, rende più difficile usare ma è più scalabile. Ad esempio, se stai generando codice e non hai alcuna logica nei modelli che generano un'altra porta per un'altra lingua, è meno noioso perché non devi replicare la logica in ogni modello.

C'è a paper da Terence Parr che spiega i benefici di model-view separazione

+1

Grazie, ma leggete il mio chiarimento sulla domanda - la risposta non mi ha davvero detto nulla che non sapevo già. – Nakedible

+0

link in carta ora rotto –

Problemi correlati