Web-Frameworks: Push/Pull
Im letzten Eintrag habe ich schon erwähnt das die Templates in dWing mehr Fähigkeiten haben. Ein Weg MVC Anwendungen zu machen, und wie es CakePHP tut und express gezwungenermaßen auch ist, dass der Controller bzw. die Ressource die darzustellenden Daten an die View übergibt. Das nennt man das Push-Modell.
Persönlich halte ich dadurch die Trennung von Controller und View einerseits zu stark, denn die View weiß nichts über den Controller, andererseits zu stark, denn der Controller muss alles über die View wissen um die darzustellenden Daten liefern zu können.
Was ist wenn auf jeder Seite, also anders gesagt bei jedem Controller oder jeder Ressource etwas dynamisches in der View dargestellt werden soll. Ich kann entweder in jedem Controller diese Sachen der View übergeben was zu sehr viel redundantem Code führt. Oder aber ich übergebe dies an einer zentralen Stelle. In Cake im AppController, oder in Express in einem Helper.
Dies ist aber auch nicht optimal: Sollte die View die Daten doch nicht benötigen ist es unnützer Overhead der das ganze verlangsamt.
bei dWing gehe ich einen gemischten Weg. Die Ressource kann einerseits die Objekte an die View übergeben, pushen. Oder aber die View holt sich selbst was sie braucht, pull. Somit kann ich die Views ändern ohne den Rest der Anwendung anzugreifen. Es besteht also eine geringere Kopplung und Abhängigkeit der View von dem Controller. Außerdem halte ich meine Controller sauber, und schlussendlich bleibt das ganze auch performant.
Dies kann man leider leider in Express mit node.js nicht machen. Mehr dazu im Teil über Lazy-Loading und Async Callbacks.