Meiner Meinung nach spricht bei einer sauberen Kapselung auch nichts dagegen, den Datenbank-Layer im Servlet anzusiedeln.
Das ist genau der Punkt. Das Servlet ist dann eine sehr große Kappsel. Klassen wie Servlets sollen nach OO-Praktiken möglichst kohäsiv sein. D.h. sie sollen eine möglichst fokussierte Aufgabe haben. Dieses hier geschilderte "Servlet" hat nach meinem derzeitigen Kenntnisstand (inklusive Annahmen) die folgenden Aufgaben:
- Request des Users entgegennehmen
- Request des Users validieren
- Hinleitung des Requests zu einem Response (könnte man Businesslogik nennen)
- Backend-Zugriff auf RDBMS
- Backend-Zugriff auf Lotus Domino
In einer normalen struts Umgebung, ist das Servlet lediglich für die entgegennahme des Requests und für die Weiterleitung an andere Klassen zuständig (via Request Dispatcher).
Normalerweise werden in dem doPost/doGet des Serlets andere Klassen erzeugt, die sich dann eben um die speziellen Aufgaben kümmern. Das geht dann
immer über mehrere Schichten. D.h. die vom Servlet erzeugte Klasse erzeugt wieder eine, die ihre Aufgabe übernimmt, u.s.w..
Der call geht durch mehrere "Schichten" von Klassen.
Dadurch werden natürlich eindeutig mehr Objekte erzeugt, als wenn einfach der ganze code in der doPost/doGet des Servlets steht. Anfänger haben manchmal die Befürchtung, dass durch die vielen instantiierten Objekte die Performance runtergeht. Das ist nicht so. Um Performance-Aussagen zu treffen, sollte man sowieso einen Profiler benutzen (hab da auch noch keine wirklich vernünftige Strategie, arbeite aber dran). Die Objekte werden automatisch durch den Garbage Collector entsorgt. Das funktioniert sehr gut.
Dieses ganze Schichtenzeug macht man nicht so einfach aus der Lamäng. Da wird man mit der Zeit besser und man sollte von anderen lernen (Bücher). Frameworks unterstützen diesen Programmierstil.
Du hast hier aber einen megaklassischen Fall von "einfacher" Architektur, dh. wir verzichten einfach auf diesen ganzen Architektur-, OO- und Design-Tineff und progen das jetzt einfach mal in dieses doGet/doPost des Servlets. Diese ganzen OpenSource Studentenframeworks und die Sprüche dieser OO-Gurus aus den Büchern haben mit "unserer" Praxis sowieso nichts zu tun.
Die Folge: Was am Anfang so schön einfach mit einem
public void doPost (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException) {
}
ist inzwischen auf ein 40.000 Zeilen Monster angewachsen mit einem Haufen von if-then.
darüber rede ich die ganze Zeit.
Axel
P.S. ich kann da keine Tipps zu geben. OO kann man nur über Bücher und erfahrene Kollegen und eigene Erfahrung lernen. Es ist ein langwieriger Prozess. OO hat sich heute in der Programmierung weitgehend durchgesetzt. Es ist kein neues Thema.