Alphonse Bendt 
Version vom: $Date: 2001/02/27 12:05:54 $

Entwurfsregeln

Projektdokumentation | Projekthandbuch | Entwurfsregeln


Zurück Hauptseite

Vorschlag : Entwurfsregeln

Logikschicht: die L Objekte

- Alle L Objekte sind EJB Proxies, dass heisst: * Sie enthalten alle EJB Methoden + Zugriffskontrolle. * Kein Objekt aus der Präsentationsschicht darf die EJBs Methoden direkt aufrufen, nur Proxies oder statische Methoden der Operations-Klasse. - Alle Assoziationen in der Datenbankschicht spiegeln sich als KOMMENTAR-Assoziationen zwischen L Objekten wieder; dass heisst, die L Objekte realisieren diese Assoziationen AUSSCHLIESSLICH über die Datenbankschicht, ohne Referenzen auf andere L Objekte zu speichern, es sei denn, es besteht keine Inkonsistenzgefahr. Konkret: ein LEvent hat mehrere assoziierte LTicketContingents. Das LEvent Objekt speichert keine Liste mit den zugeordneten LTicketContingents; bei Bedarf kann sich das LEvent eine Liste von LTicketContingent'en erzeugen lassen (oder ein einzelnes LTicketKontingent), indem es die ItemFactory nach der ID fragt. - nur das ItemFactory-Objekt darf L Objekte erzeugen; die ItemFactory erhält man von dem ServletContext, durch getAttribute("itemfactory"). - die L Objekte werden durch ID identifiziert; es ist die Rolle der Factory diese IDs auf die entsprechenden EJBs abzubilden.

Präsentationsschicht:

Alle Objekte der Logikschicht werden durch ID identifiziert. ID enthält auch den Typ, als Integerkonstante ! Es gibt 3 Arten von Operationen bzw. Szenarien:

I) anhand ID anzeigen Schritte: - das entsprechende L Objekt wird von der ItemFactory geholt durch getItem(ID) - das L Objekt wird der entsprechenden JSP übertragen und dort dargestellt Beispiel : READ_ONLY Veranstaltung anzeigen - der HandlerBrowsable bekommt den Request als processRequest(...) - holt sich die ID vom Objekt aus dem Request - holt sich das L Objekt von der Factory: factory.getItem(ID) - überträgt das L Objekt dem JSPEvent (der Handler kennt den Typ des Objektes !) Beispiel 2: TicketKontingent zum Editieren anzeigen (als Formular !) - der HandlerEditable bekommt das Request als processRequest(...) - holt sich die ID von Objekt aus dem Request - holt sich das L Objekt von der Factory: factory.getItem(ID) - überträgt das L Objekt dem JSPEditableTicketKontingent (der Handler kennt den Typ des Objektes !)

II) einziges ändern, anhand ID Schritte: - ein Editable Objekt wird von der EditableFactory geholt, durch getEditable(ID); dieses Objekt kapselt das entsprechende L Objekt, weil EditableFactory die Anfrage an ItemFactory weiterleitet - die Methode doSubmit(Request,Response) von dem Editable Objekt wird aufgerufen; diese benutzt die verfügbare Proxy-Methoden um die Daten zu ändern. Beispiel: Provider editiert TicketKontingent - er navigiert bis das TicketKontingent als Formular angezeigt wird (sehe Beispiel 2, oben) - ändert die Daten und drückt Submit - der HandlerEditable holt sich das EditableTicketKontingent Objekt von der EditableFactory und ruft die Methode doSubmit(Request,Response); als Antwort bekommt er eine Bestätigung, bzw. Fehlermeldung (die mittels JSP angezeigtwerden kann)

III) Transaktionale Operationen auf mehrere Beans - wenn sie einer L-Klasse zugeordnet werden können, wird eine solche Operation als L-Methode implementiert. Sie ruft direkt eine entsprechende Bussiness-Methode der Entity EJB auf, wobei eventuell Parameters umgewandelt werden müssen. Die Implementierung als Bussiness-Methode in der Entity EJB hat den Vorteil des impliziten Transaktionsschutz. - wenn nicht, dann wird die Operation in der Logikschicht als statische Methode der Klasse Operations definiert. Sie wird aber weiter in einer Session Bean implementiert, die den Transaktionsschutz gewährleistet. Egal ob in L-Klasse oder Operations, bekommt jede solche Operation als Parameters Referenzen auf L-Objekte; dass heisst, die Präsentationsschicht muss die IDs in Referenzen auf L-Objekte umwandeln lassen (durch ItemFactory.getItem()). Auf der anderen Seite, die tatsächliche Implementierung in der Entity EJB, bzw. SessionBean soll nur EJB-Referenzen als Parameters bekommen. Dass heist, die L-Methode bzw. die statische Operation muss die Referenzen auf L-Objekte in EJB Referenzen umwandeln ( z.B durch .getBean() ). Beispiel: Kauf tätigen braucht: ein Kauf Objekt (verfügbar als ID), der Kunde, Zahlungsartinformation, die TicketContingents der gekaufte Tickets Die Operation kann in der Klasse LKauf implementiert werden. In der Lkauf Klasse : Alle L Objekte die durch ID eingegeben sind können sehr einfach über die ItemFactory geholt und in EJB Referenzen umgewandelt werden. Die entsprechende Methode in der EJB wird aufgerufen. In der Implementierung in dem KaufBean: Jetzt hat man alle benoetigten EJBs; man fuehrt einfach die Transaktion aus.


Zurück Top Hauptseite