Dieser hat mich so lange verfolgt. Was ist Ihrer Meinung nach die bessere Programmierpraxis bei der MVC-Programmierung? Sollte man vollständig ausgefüllte oder teilweise ausgefüllte Modelle verwenden, insbesondere wenn ich weiß, dass ich für diese bestimmte Aufgabe nur 2 Felder aus dem Modellobjekt benötige, die 5 andere haben?
Manchmal scheint es nur kriminell, eine Liste von 20 Modellobjekten mit allen Werten aus der Datenbank zu füllen, wenn Sie wissen, dass Sie nur wenige davon benötigen.
Teilmodell bedeutet natürlich, dass Sie eine weitere Methode in Ihr DAO schreiben müssen, abgesehen von der, die alles abruft. Was bedeutet mehr Code zu pflegen?
Auf der anderen Seite bedeutet das Abrufen von Daten aus der Datenbank mit vollständig bestückten Modellen, dass eine Methode allen dient, aber dies wird Ihnen offensichtlich einen gewissen Leistungsaufwand bringen.
Ich kann sehen, dass ORM (wie Hibernate oder ActiveRecord of Rails) Trends in der MVC-Programmierung bevorzugt und Datenbanken wie Googles BigTable-Vollmodelle als Trend akzeptiert werden. Aber was ist, wenn Sie immer noch guten alten JDBC verwenden?
Hardware ist billig, Entwicklung ist teuer. Stimmt das wirklich, selbst wenn die App auf einige hunderttausend Anfragen pro Stunde skaliert werden muss?
Antworten:
Sie haben zwei Möglichkeiten:
1) Lassen Sie einige Felder im Modell ungefüllt
2) Erstellen Sie ein zusätzliches "Lite" -Modell für Ihre spezifische Situation
Welche Sie wählen sollten, hängt wieder von den beiden Dingen ab:
a) Wie viele Felder des "vollständigen" Modells werden ignoriert?
b) Wie oft wird dieses "Lite" -Modell instanziiert?
Wenn es nur ein paar oder mehr Felder gibt, die nicht ausgefüllt werden können, ist es in Ordnung, mit 1) fortzufahren.
Wenn b) nur eine außergewöhnliche Einzelsituation ist, macht es möglicherweise keinen Sinn, ein zusätzliches Modell nur für einen Anwendungsfall zu erstellen.
Ein anderer Ansatz besteht darin, ein "Lite" -Modell zu definieren und das "vollständige" Modell davon zu erben.
quelle
Wenn Ihre Ansicht nur 2 Eigenschaften aus dem Modell benötigt, haben Sie (wahrscheinlich) das falsche Modell für diesen Anwendungsfall! Ich würde versuchen, ein Modell zu erstellen, das der Ansicht entspricht, die zusätzlichen DB-Lookups speichern und nur die Daten auffüllen, die Sie benötigen. Wenn eine nachfolgende Ansicht mehr Details benötigt, müssen Sie sich fragen, ob ich die zusätzlichen Daten später erhalte oder ob ich alles im Voraus erhalten soll ...
Alternativ können Sie sich eine Art verzögerte Auswertung ansehen, sodass die Werte bei Bedarf ausgefüllt werden. Dies kann gut funktionieren, ist aber offensichtlich mehr Arbeit und kann zu mehreren Roundtrips zur DB führen, was nicht besonders gut ist, wenn Sie am Ende viel tun.
Wenn Sie jedoch im Grunde genommen ein paar zusätzliche Felder aus einer Tabelle oder Ansicht auswählen, sind die Kosten für das Abrufen dieser zusätzlichen Daten in jeder Hinsicht gleich Null (OK, es befinden sich mehr Bytes auf der Leitung, aber die größten Kosten sind wahrscheinlich Wenn Sie also die Möglichkeit haben, zusätzliche Daten zu benötigen, würde ich das Modell wahrscheinlich vollständig füllen, sobald Sie zufrieden sind, dass Sie das richtige Modell haben .
Hardware ist billig, aber keine Menge an Hardware kann dazu führen, dass ein schlechtes Design eine gute Leistung erbringt.
quelle
Das Modell ist kein DAO.
Und noch etwas: Wenn Sie sagen, dass Sie 20 Modelle haben (Kunden aus Ihrem Beispiel), dann ist das kein MVC-Modell. Das Domänenmodell wird nicht direkt einer einzelnen Tabellenzeile zugeordnet. Stattdessen sollte es für alle Vorgänge verantwortlich sein, die mit Ihren "Kunden" durchgeführt werden.
In Ihrem Beispiel ist "Kunde" kein Domänenmodell, sondern nur ein Objekt innerhalb des Modells.
Bei der Interaktion mit der Datenbank sollte diese Verantwortung an ein Data Mapper- Objekt delegiert werden, das wissen sollte, wie Ihre Instanzen der Kundenklasse gespeichert und abgerufen werden.
quelle