Wenn ich mit HTML-Muster-Template arbeite, dann haben alle später darin befindlichen Elemente bereits drin zu sein
Du machst es mir schwer dir zu folgen, du verwendest Template mehrdeutig für das rohe Template - die Schablone - und offentlich auch für das fertig gerenderte Produkt. Ein Template kann selbstverständlich Platzhalter für generischen Inhalt bereitstellen, im fertigen Produkt sollten diese dann ersetzt worden sein und nicht mehr vorkommen. Das fertige Produkt ist meistens eine Komposition von vielen Templates gefüllt mit Daten aus aus vielen ViewModels, da kann man schlecht vorhersagen, welche Elemente letztendlich wirklich hineinfließen.
so dass ich ein "Look & Feel" durchführen kann, die Validität prüfen kann und ein Styling per CSS durchführen kann. Das einzige, was fehlt, sind die echten Daten.
Templates können in ganz unterschiedlichen Kontexten wiederverwendet werden, DAS "Look & Feel" und DAS "Styling" für ein Tempate existiert nicht. Ein Template für sich genommen kann nur in einem sehr eingeschränkten Rahmen getestet und gestaltet werden. Um zu sehen, wie sich ein Template in verschiedenen Umgebungen verhält, muss man Integrationstests durchführen. Wenn man noch keine Originaldaten zum Testen hat, oder wenn man aus anderen Gründen nicht mit den Originaldaten testen möchte, dann kann man Prototypen entwickeln, die verschiedene Umgebungen "mocken".
Das Backend oder das Zwischengesicht können dieses Template nun expandieren oder komprimieren, d.h. Elemente hinzufügen oder entfernen und selbstverständlich die echten Nutzdaten an den richtigen Stellen einsetzen. Und genau HIER greift die Forderung von der strikten Trennung nicht mehr.
Meinst du mit Backend die Templating-Engine? Dann verstehe ich nicht, wo du hier die strikte Trennung von Daten und Präsentation verletzt siehst, beides kann getrennt voneinander entwickelt werden und ausgetauscht werden ohne den jeweils anderen Bereich zu tangieren. Irgendwann kommt natürlich der Punkt an dem Daten und Schablone mal zusammengeführt werden müssen, aber das passiert ja automatisch. Da sehe ich also keine Mischung der Verantwortlichkeiten.
Das Backend oder besser das Interface müssen nun sehr wohl wissen, an welcher Template-Sprache sie zu operieren haben.
Auch du müsstest mal bitte konkretisieren, was du mit Backend eigentlich meinst, Interface ist da auch nicht viel aufschlussreicher. Und auch was du in diesem Zusammenhang mit Tempalte-Sprache meinst erschließt sich mir nicht. Hier kommt es mir er so vor, als redest du von dem finalen Ausgabeformat (zum Beispiel HTML), als von der Templatingsprache (zum Beispiel mustache). Korrigiere mich, wenn ich damit falsch liege.
Alternativ muss das Template eine eigene Aufbereitung erhalten, durch die es aber i.d.R. seine Validität im Rohzustand verliert.
Das verstehe ich nun wirklich nicht, wann ist ein Template denn valide?
Deshalb steht immer noch meine Frage im Raum, wie man denn die bestmögliche Trennung erreichen kann?
Tipp ins Blaue: Du suchst du nach etwas wie Databinding, also nach einer Möglichkeit Daten und Views möglichst elegant miteinander zu synchronisieren ohne dabei ins Datenmodell oder ins Tempalte eingreifen zu müssen.