Modellierung der Zugriffslogik auf Modellierung der Zugriffslogik auf DatenbanktabellenDatenbanktabellenSoftware Component Technology for Distributed ApplicationsSoftware Component Technology for Distributed Applications
Andreas FinkAndreas Fink
InhaltInhalt
Modellierung der Zugriffslogik auf DatenbanktabellenModellierung der Zugriffslogik auf Datenbanktabellen
1.1. EinleitungEinleitung
2.2. Kapselung der Zugriffslogik in Patterns Kapselung der Zugriffslogik in Patterns
2.1 2.1 Table Data GatewayTable Data Gateway
2.22.2 Data Row GatewayData Row Gateway
3.3. Object Relational Mapping mit Jakarta OJBObject Relational Mapping mit Jakarta OJB
2.32.3 Active RecordActive Record
Was wir bereits kennen…Was wir bereits kennen…
EinleitungEinleitung
...Transaction Script......Transaction Script...
... ... Domain ModelDomain Model
Patterns zur Patterns zur Kapselung derKapselung der Application Logic +Application Logic + DatenzugriffDatenzugriff in Transaction Script und Domain Modelin Transaction Script und Domain Model
Funktionale Dekomposition der Anwendung, Funktionale Dekomposition der Anwendung, Kapselung der einzelnen Abläufe in TransaktionenKapselung der einzelnen Abläufe in Transaktionen
Modellierung der Application Logic durch eine Modellierung der Application Logic durch eine entsprechende Objekthierarchie innerhalb der entsprechende Objekthierarchie innerhalb der Anwendung.Anwendung.
Was fällt uns dabei aufWas fällt uns dabei auf
Viele einfache Zugriffe wiederholen sich Viele einfache Zugriffe wiederholen sich nahezu identisch (Duplication of Code)nahezu identisch (Duplication of Code)
Das DB-Zugriffsystem wird unübersichtlich Das DB-Zugriffsystem wird unübersichtlich und schwer zu Testen / zu optimierenund schwer zu Testen / zu optimieren
Jeder Entwickler muß mit SQL vertraut seinJeder Entwickler muß mit SQL vertraut sein
Tight Coupling zwischen Anwendungslogik Tight Coupling zwischen Anwendungslogik und Datenbankstruktur (Veränderungen!?)und Datenbankstruktur (Veränderungen!?)
Insbesondere bei TS aber auch DMInsbesondere bei TS aber auch DM
Wie lösen wir das ProblemWie lösen wir das ProblemKapselung der Zugriffslogik in Objekten Kapselung der Zugriffslogik in Objekten
Tabellen als ObjekteTabellen als Objekte
Rows als ObjekteRows als Objekte
Active RecordsActive Records
Data MapperData Mapper
Table Data Table Data GatewayGateway
Eine Klasse repräsentiert eine TabelleEine Klasse repräsentiert eine Tabelle
Simples InterfaceSimples Interface
Einfache Methoden für parametrisierte Einfache Methoden für parametrisierte SQL-AufrufeSQL-Aufrufe
Keine Business LogikKeine Business Logik
ZustandslosZustandslos
Auch Mapping von Views möglichAuch Mapping von Views möglich
Row DataRow DataGatewayGateway Bei häufiger Manipulation Bei häufiger Manipulation
einzelner Zeilen (DM)einzelner Zeilen (DM)
Finder Class vonnötenFinder Class vonnöten
Nur einfache AufrufeNur einfache Aufrufe
Keine Application LogicKeine Application Logic
Virtuelle Rows für ViewsVirtuelle Rows für Views
Automatisierte Code Automatisierte Code Generation idealGeneration ideal
Active RecordActive Record Bei spezialisiertem Bei spezialisiertem
Zeilenweisen Zugriff doch Zeilenweisen Zugriff doch wieder Business Logic?wieder Business Logic?
Intuitives isomorphes Intuitives isomorphes Mapping für DMMapping für DM
Kompliziertere Kompliziertere SpezialfunktionenSpezialfunktionen
Aber kein Separation of Aber kein Separation of Concerns mehrConcerns mehr
Bei Strukturproblemen Bei Strukturproblemen DataMapper anwendenDataMapper anwenden
Object Relational MappingObject Relational Mapping
Domain Model mit KlassenhierarchieDomain Model mit KlassenhierarchieAnwendungsfallAnwendungsfall
Wie bilde ich Klassenbeziehungen:Wie bilde ich Klassenbeziehungen:z.B. ProjectManager isA Employee z.B. ProjectManager isA Employee
automatisiert in Datenbankstruktur ab?automatisiert in Datenbankstruktur ab?
Problem:Problem:
z.B. Apache Jakarta OJB als z.B. Apache Jakarta OJB als kostenlose Alternativekostenlose Alternative
Oder kommerzielles PaketOder kommerzielles Paket
AntwortAntwort
3 Verfahrensalternativen3 Verfahrensalternativen Jede Klasse komplett auf eigene TabelleJede Klasse komplett auf eigene Tabelle
(ordentlich aber unperformant)(ordentlich aber unperformant)
Alle Klassen einer Hierarchie in eine Alle Klassen einer Hierarchie in eine TabelleTabelle(unordentlich aber performant)(unordentlich aber performant)
Nur zusätzliche Properties in jeweils Nur zusätzliche Properties in jeweils eigene Tabelleeigene Tabelle(ordentlich aber unperformant)(ordentlich aber unperformant)
Implementierung in Jakarta OJBImplementierung in Jakarta OJB Es werden nur Möglichkeit 1 und 2 Es werden nur Möglichkeit 1 und 2
unterstütztunterstützt
Abbildung erfolgt mit XML OJB-Descriptor Abbildung erfolgt mit XML OJB-Descriptor auf Klassenpropertiesauf Klassenproperties
Noch Fragen?Noch Fragen?
Vielen Dank für die Vielen Dank für die Aufmerksamkeit!Aufmerksamkeit!