Ich fühle mich wie die Persistenz sollte mehr mit dem Objekt selbst verbunden werden als das Servlet.
Weder richtig sind, im Grunde müssen wir die Anwendung richtig dh der Schicht, sollten wir nicht beide Front-End (Benutzeroberfläche) mischen Anliegen und Geschäftslogik und unten für weitere Erklärung überprüfen auf die Web-Anwendung Layering .
Sollte ich die DB-Funktionalität in die Person obj? Oder erstellen Sie etwas neues "Ding", um damit umzugehen?
Nein, Sie müssen die Datenzugriffsebene separat behandeln, z. B. mit einem DAO- (Data Access Object) oder Repository-Layer.
Im Allgemeinen ist die Web-Anwendung-Architektur funktioniert wie folgt:
HTML/JSP -> Servlet & Controller-Klassen -> Service Layer -> DAO Ebene -> Datenbank
Jede dieser Schichten ist aus seinen eigenen Gründen gemeint und wir sollten die Sorgen nicht mischen.
Jetzt speziell über die DAO-Ebene sprechen (siehe hier, wie DAO Muster funktioniert), gibt es verschiedene Frameworks zur Verfügung, um die Dinge einfacher zu machen und ORM (Object Relational Mapping) ist das Konzept, das Sie interessieren könnte. Um nur einige zu nennen, Die beliebten ORM-Frameworks sind Hibernate und Spring data JPA.
UPDATE:
So, das Servlet akzeptiert die Anforderung, deserialisiert die Daten an einigen Daten binden Klassen, die die JSON-Schema entsprechen. Dann übergibt es diese an einige "Service-Schicht", die eine Art von Manipulation und generiert DAO-Objekte, die die Tabellenstrukturen entsprechen und speichert es ab?
Sie sind fast da, das einzige, was Sie fehlt, ist, dass DAO-Objekte sind Singleton-Klassen (sie die Daten nicht halten, nur bieten sie Methoden Zugriff auf die Datenbank) und die Modell/Entity Beans sind wirklich verwendet, um die Daten zu speichern.
Sie die folgenden einfachen Beispiel beziehen kann unter der Annahme, dass es die PRODUCT
Tabelle in der Datenbank zugreift:
ProductDAOImpl Klasse (Singleton-Objekt):
public class ProductDAOImpl implements ProductDAO { //or ProductRepository
public boolean save(Product product) {
//add implementation
}
public List<Product> queryProducts() {
//add implementation
}
public Product queryUniqueProduct(String productId) {
//add implementation
}
//etc...any other methods you would like
}
Produktklasse (ein Objekt für jede Anfrage vom Kunden/Benutzer):
public class Product { //It is an Entity class
private String id;
private String name;
private int price;
//all other fields
//getters and setters
}
Was ist, wenn Sie eine Diskrepanz zwischen Anfrage und Datenmodell haben?
immer sicher, dass beide Präsentationsschicht-Beans und Entity (Datenbank) Modell Bohnen getrennt sein sollten, dh es ist keine gute Praxis, die Bohnen in diesen beiden Schichten zu teilen weil ein Business-Logik Griffe und andere Für die Benutzeroberfläche (Frontend) sollten beide lose gekoppelt sein.
So nimmt das Servlet die Anfrage an und deserialisiert die Daten in einige Datenbankklassen, die dem JSON-Schema entsprechen. Dann übergibt es diese an eine "Service-Schicht", die irgendeine Art von Manipulation durchführt und DAO-Objekte generiert, die mit den Tabellenstrukturen übereinstimmen und sie speichern? – MichaelB
Ein Beispiel hinzugefügt, siehe oben – developer
Was ist, wenn Sie eine Diskrepanz zwischen Anfrage und Datenmodell haben ... So erhalten Sie eine POST von einer "Person" json wie, "{Name: Joe, Alter: 21, Adresse: {Straße : fake, city: seattle}} sende dies an eine "person" controller, die eine "Person" POJO und eine "PersonDAO" dann ein "AddressDAO" erstellt, um jede Datenbearbeitung zu tun? – MichaelB