| 

.NET C# Java Javascript Exception

3
Hey Leute,

mal so ne Frage am Rande:

Wenn ich MVC-Pattern arbeite, sollte ich dann im Model die Inhalte bereits formatieren?
Angenommen:

Ich habe in meiner Datenbank ein feld welches als datetime formatiert ist. Sollte in dann in meiner getDate dann bereits ein - durch zB. new DateTime() - formatierten Wert (15.01.2013 anstatt 2013-01-15) als Rückgabewert definieren oder den Standard lassen?

Viele Grüße
14.01.2013
spiike 170 1 7
2 Antworten
2
So wie ich das MVC-Pattern verstehe und anwende ist es erst einmal egal woher die Daten im Model kommen, das Model repräsentiert einfach die Daten und (je nach Auslegung) die Fachlogik. Somit muss eine getDate-Funktion des Models (wie jede andere Methode des Models, die ein Datum zurück gibt) ein Objekt zurückgeben, dass ein Datum (Date, DateTime, DateTimeWithZone, ...) repräsentiert. Sinnvoll ist es aber sich im Projekt auf einen Typ zu einigen, also ein Datum muss immer durch ein Date oder DateTime (oder so) bzw. einem Objekt das von der festgelegten Klasse erbt repräsentiert werden.

Aus MVC-Sicht ist es auch egal welches "Format" die Datenbank für ein Datum braucht, weil es Aufgabe der zuständigen Komponenten, die den Datenbank-Treiber ansprechen, ist das Datum in das Format zu konvertieren, mit dem die Datenbank arbeitet. Ein Model muss auch nicht unbedingt etwas repräsentieren, das direkt aus einer Datenbank geladen wird, selbst wenn das andere Modelle im Projekt tun (es könnten ja auch Composite Pattern, Decorator Pattern, etc. für ein Model verwendet werden).

Für das Formatieren der Ausgabe ist allein die View-Schicht zuständig. Ob das jetzt mit einem (durchaus zu empfehlenden) Template-Framework oder über selbst geschriebene Helper-Methoden realisiert wird ist für MVC unerheblich.

Wichtig ist nur, dass ein Model alle Daten in objektorientierter, view-unabhängiger, Form bereitstellt, ein View sich nur um die Ausgabe kümmert (egal ob HTML, JSON, XML, irgendein Desktop-GUI-Framework, wasauchimmer) und der Controller nur den User-Input aufbereitet und an die richtigen Komponenten weiterreicht.

Ich packe i.d.R. auch die Fachlogikins Model, aber da scheiden sich die Geister und es gibt auch gute Argumente dafür die Fachlogik nicht ins Model zu packen.
15.01.2013
phg 1,6k 3
Vielen Dank für die umfangreiche Info!
spiike 15.01.2013
2
Naja grundsätzlich sagt eigentlich ja schon die Definition von MVC-Pattern aus, dass ein für die Ausgabe bestimmter Wert im letzten Moment in der View-Ebene formatiert ausgegeben werden soll. Das Model stellt ja nur die Daten zur Verfügung und darf sich mal grundsätzlich nicht in Belange rein pfuschen, die mit Daten-Anzeige zu tun hat. Das ist zumindest mein Verständnis vom MVC-Pattern.

Rein pragmatisch und realitätsnah betrachtet sollte das die benutzte Template-Engine (hiermit ist nicht PHP alleine im althergebrachten Sinn zu verstehen, so was wie Smarty zum Beispiel also) solche oft gebrauchten Formartierungs-Funktionen eingebaut haben oder zumindest anbieten, eine Formatierungs-Funktion mittels einer Plugin-Technik, die Template-Engine dahingehend zu erweitern. Sollte keine Template-Engine benutzt werden, so sollte die Formatierung möglichst nah an der Ausgabe in der View-Ebene sein.

Ps: Eine Datumsangabe nach YYYY-MM-DD lässt sich einfacher nach Aktualität sortieren als eine DD.MM.YYYY Angabe und sollte, wenn schon vorhanden, auch so im Model drin bleiben.
15.01.2013
Stelzi79 44 1
Ok, das mit dem sortieren des Datums ist mir bewusst.

Ich hab noch nicht so recht verstanden was du mit der Template-Engine meinst.

Ich hätte mir jetzt Helper-Methoden zur formatierung geschrieben.

Gruß Paul
spiike 15.01.2013
Eine Template-Engine hilft bei der Trennung zwischen Applikationslogik und der Anzeige.
Ein quasi Standard in diesem Bereich ist Smarty. Ich habe ein paar Links zusammen getragen, die Smarty genauer beschreiben.

http://de.wikipedia.org/wiki/Smarty
http://www.smarty.net/docsv2/de/what.is.smarty.tpl
Stelzi79 15.01.2013

Stelle deine Php-Frage jetzt!