08.12.2012 Aufrufe

2 UML-based Web Engineering - UWE - Ludwig-Maximilians ...

2 UML-based Web Engineering - UWE - Ludwig-Maximilians ...

2 UML-based Web Engineering - UWE - Ludwig-Maximilians ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

7.3 Umsetzung der <strong>UWE</strong>-Modelle<br />

7.3.1 Umsetzung des Inhaltsmodells<br />

Es ist klar, dass die Klassen des <strong>UWE</strong>-Inhaltsmodells in der Modell-Komponente von Rails<br />

umzusetzen waren. Aufgrund der Objektorientierung von Ruby ist die Implementierung<br />

prinzipiell sehr geradlinig – die Elemente des Inhaltsmodells (Klassen, Attribute, Methoden,<br />

Assoziationen) müssen 'einfach' in die entsprechenden programmiersprachlichen Konstrukte<br />

von Ruby übersetzt werden. Allerdings war zu berücksichtigen, dass die Domänenobjekte der<br />

Modellklassen (Publikationen, Personen etc.) in geeigneter Weise in einer relationalen<br />

Datenbank persistiert werden müssen. Zur Lösung dieser Aufgabe stellt Ruby on Rails mit<br />

dem ActiveRecord-Modul einen objektrelationalen Mapper zur Verfügung. Allerdings bringt<br />

dessen Einsatz eine Einschränkung mit sich, die sich bei der Umsetzung des <strong>UWE</strong>-<br />

Inhaltsmodells bemerkbar gemacht hat. Sie soll im Folgenden erläutert werden.<br />

Während objektorientierte Sprachen Daten in Objekten kapseln, basieren relationale<br />

Datenbanken auf dem mathematischen Konzept der Relation, um Daten in Form von Tabellen<br />

zu verwalten. Die Technik der objektrelationalen Abbildung dient zur Überbrückung der<br />

strukturellen Unterschiede, die sich aus der Verwendung dieser beiden Paradigmen ergeben.<br />

Ruby on Rails integriert mit ActiveRecord einen objektrelationalen Mapper, der das<br />

gleichnamige Design-Pattern von Martin Fowler realisiert: Die strukturellen Aspekte einer<br />

Domänen-Klasse werden 1:1 auf eine Datenbanktabelle abgebildet, für jedes Attribut existiert<br />

eine entsprechende Tabellenspalte, ein Datensatz einer Tabellenzeile entspricht damit genau<br />

einem Objekt. Zusätzlich enthält die Klasse Domänenlogik und Methoden zum Zugriff auf die<br />

Datenbank 67 .<br />

Zur Abbildung von Vererbungshierarchien auf Datenbankebene greift Rails auf ein weiteres<br />

Design Pattern von Fowler zurück: Mit Single Table Inheritance (SIT) werden alle Klassen<br />

der Hierarchie auf eine Tabelle abgebildet. Diese Tabelle besitzt für jedes Attribut jeder<br />

Klasse der Vererbungshierarchie eine entsprechende Spalte. In einer zusätzlichen Kolumne<br />

wird der Typ des Objekts gespeichert, um bei der Rematerialisierung dem aus der Datenbank<br />

zu ladenden Objekts den richtigen Typ zuweisen zu können. Diese Methode zur Erfassung<br />

von Vererbungshierarchien in relationalen Datenbanken hat einige Vorteile, z.B. sind im<br />

Vergleich zu Techniken, die den Einsatz mehrerer Tabellen erfordern, keine kostspieligen<br />

Join-Operationen notwendig. Auf der Soll-Seite ist dagegen unnötiger Speicherplatzverbrauch<br />

und unübersichtliches Tabellendesign zu verbuchen: Viele, wenn nicht gar alle Datensätze der<br />

Tabelle besitzen ungenutzte Felder, die zu ihrer Beschreibung nicht benötigt werden, da die<br />

entsprechenden Spalten zur Abbildung von Attributen anderer Subklassen dienen.<br />

Problematisch ist nun, dass im ActiveRecord-Modul von Rails ein derart hohes Maß an<br />

Strukturgleichheit von Objekt- und Datenbankebene realisiert wird, dass diese zuletzt<br />

genannte Schwäche von SIT sogar auf Objektebene übertragen wird: Die Koppelung von<br />

Objekt- und Datenbankebene ist hier so stark, dass nicht nur alle Datensätze der<br />

Vererbungstabelle alle Felder besitzen, sondern dass sich auch alle Domänenklassen der<br />

Vererbungshierarchie die Attribute aller Subklassen teilen 68 . Neben einem unsauberen<br />

Tabellen- erhält man zwangsläufig auch ein unsauberes Modelldesign: Objekte besitzen<br />

Attribute, die sie eigentlich nicht haben sollten, und der Programmierer muss selbst dafür<br />

Sorge tragen, dass bei den Instanzen einer betroffenen Modellklasse keine sinnlosen Attribute<br />

67 [9], S.160ff<br />

68 Siehe dazu auch [36], S.261<br />

80

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!