Wie ich MVC verstanden habe, sollte die Logik für das Modell auch in das Modell selbst eingehen - jedes Objekt zu einer eigenständigen Einheit machen. Dies bedeutet, dass die Methoden einer Klasse Auslöser und Ketten von Aktionen haben müssen. Zum Beispiel kann durch die Verwendung von setZipCode (zip) in einer Person-Klasse eine Aktion ausgelöst werden, bei der die Postleitzahl von einer Zip-zu-Stadt-Tabelle nachgeschlagen wird, und dann setCity (Stadt) gleichgesetzt wird.Implementieren von MVC bei Verwendung von JPA
Das alles scheint nett und alles, aber was passiert, wenn Sie einige JPA-Implementierung ins Bild nehmen? Wie ich es sehe, müssen die Setter und Getter der Klasse von jeder zusätzlichen Logik frei sein, da die JPA-Implementierung diese zum Aufbau der Objekte verwendet. Daher kann setCity nicht innerhalb von setZipCode aufgerufen werden. Wir haben es geschafft, mit diesem Projekt arbeite ich, indem ich die gesamte modellspezifische Logik auf die Controller-Ebene verschiebe. Anstatt die Person in diesem Fall direkt aufzurufen, würden wir PersonController.setAddressInfo (zip) aufrufen, die beides oder etwas Ähnliches behandelt. Vielleicht wäre eine schönere Option transiente Funktionen innerhalb der Entität selbst, die dies tut.
Also hier ist meine Frage: Habe ich etwas Grundlegendes in den Prinzipien von MVC oder JPA verpasst, oder kann MVC bei der Verwendung einer ORM-Schicht nicht vollständig implementiert werden? Wäre es besser, wenn die generischen Setter und Getter für JPA privat wären und die Klassen eine separate öffentliche, transiente API für die Entwickler hätten? (Hibernate scheint aus irgendeinem Grund nicht auf private Methoden zuzugreifen.)
Von den JPA-Implementierungen verwenden wir Hibernate im Projekt, mein Kollege hat EclipseLink in einem anderen Projekt verwendet und ich habe etwas über OpenJPA gelesen in letzter Zeit.