2016-10-02 4 views
0

Ich habe angefangen Freemarker zu benutzen, um eine Ausgabe basierend auf einem Datamodell zu erzeugen. Das Problem, dem ich gegenüberstehe, ist, dass ich die Methoden in meinem Datamodel für meine Ausgabegenerierung offenlege. Ich habe das Gefühl, mein Datamodel nur für mein Freemarker-Template zu "verschmutzen". HierFreemarker Datenmodell Verschmutzung

ein Beispiel:
Mein Datenmodell, das eine Schnittstelle in meinem Fall ist, diese Methode liefert (geänderte Namen und Typen für Illustration):

Collection<MyPojo> getMyPojos(); 

Um die Vorlage, um die Art und Weise zu schreiben I Stell dir vor, ich muss einige von MyPojo basierend auf einer Bedingung filtern. Ich wollte es zuerst in der Vorlage selbst machen, aber es sah ziemlich kompliziert aus, Listen in der Vorlage zu bearbeiten.
So landete ich andere Methoden in meiner Schnittstelle Aufsummierung auf die Bedürfnisse der:

Collection<MyPojo> getAddedMyPojos(); 
Collection<MyPojo> getRemovedMyPojos(); 

der Dokumentation Freemarker Lesen, habe ich nicht einen Weg zu verwenden, um einige Fremarker API gefunden mehr Verfahren zum Template-Prozessor zur Verfügung zu stellen.
Gibt es einen schlaueren Weg mit Freemarker, um dieses Ziel zu erreichen? Ich möchte meine Schnittstelle nur mit der ersten Methode sauber halten. Muss ich ein dediziertes Datamodel erstellen und mein erstes Datamodell erweitern? Oder um eine Map zu erstellen und diese anstelle meines Datamodells zu injizieren (und mit den Ergebnissen meiner Methoden zu füllen)?

Danke!

+1

FreeMarker benötigt ein View-Modell. Wenn die Ansicht simpel ist, dann reicht oft die direkte Verwendung des Datenmodells aus ... aber selbst dann werden viele argumentieren, dass Sie das nicht tun sollten. Wenn Sie Dinge wie Sortieren, Filtern, Berechnungen usw. ausführen, sollte Ihre Ansicht auf jeden Fall ein dediziertes Modell haben: Trennen Sie die Sorgen von Speicher und Ansicht. –

+0

Danke Glenn für dich Kommentar. Also sollte ich Ihrer Meinung nach nicht die Schnittstelle bereitstellen, sondern die Implementierung, bei der ich bei Bedarf weitere Methoden bereitstellen kann? – Xendar

+1

Ich würde ein dediziertes POJO erstellen, das ausschließlich von Ihrer FreeMarker-Vorlage verwendet wird. Weder die Datenschnittstelle * noch ihre Implementierung sollten irgendwelche Bedenken oder Höflichkeit in Bezug auf die Ansicht haben. Ich weiß, dass das nicht sehr OOP klingt, aber Daten und Sicht sind sehr unterschiedliche Anliegen. Sie könnten das "view POJO" die Datenschnittstelle als Konstruktorargument verwenden lassen, aber ich würde es nicht auf die Daten * implementation * aufmerksam machen. –

Antwort

0

Wie von Glenn Lane vorgeschlagen, ist es besser, den Code für Freemarker zu isolieren. Die Implementierung eines dedizierten POJO