[UML] Collections
- From: Heiner Kücker <mail@xxxxxxxxxxxxxxxx>
- Date: Sun, 8 Jun 2008 14:59:45 +0200
Hallo Leute,
ich arbeite sehr gern mit Java-Collections,
nicht nur ArrayList (es gibt Entwickler,
die kennen nur diese Collection).
Meist nutze ich die Collections in
erweiterter Weise wie Bags, MultiMaps,
bidirektionale Maps.
Ich wundere mich nun, dass es in der UML
scheinbar keine so richtige Notation für
solche Strukturen gibt.
In gewisser Weise ähnelt eine MultiMap
einer Aggregation, es gibt Eltern-Objekte
(Key) und Kind-Objekte (Value-Map).
Vielleicht hat das seinen Grund darin,
dass es in der Entity-Relationship-Modellierung
der Datenbanken keine Modellierung der
Indexe (schlagt mich jetzt bitte nicht wegen dem
korrekten Plural) gibt, diese sind ein Performance-Hint.
Das Modell käme eigentlich auch mit einem
Full-Table-Scan klar.
So ähnlich ist es evtl. auch mit Sets und Maps in
Klassendiagrammen, nur Performance-Hints ?
Was meint Ihr ?
Anderes Thema:
Wenn man eine Map in eine bidirektionale Map
umwandelt, benötigt man eine MultiMap, der gleiche
Value könnte ja von mehreren Keys in der
ursprünglichen Map referenziert worden sein.
Genauso könnte man sich eine
birdirektionale MaultiMap vorstellen, die
ursprüngliche nicht bidirektionale Map
war schon eine MultiMap, eine
BidiMultiMap.
Diese entspricht irgendwo einer
Intersection-Tabelle in der ER-Modellierung
(Datenbank).
Naheliegenderweise müsste man ein ER-Diagramm
in eine Klassen-Diagramm und andersherum
konvertieren können ?
Kennt Ihr so etwas ?
Nun ja, es gibt Besonderheiten. Auf der Datenbank
sind die Verbindungen in natürlicher Weise
bidirektional und alle Instanzen einer Klasse
sind über die Tabelle natürlich zusammengefasst.
So etwas wäre evtl. auch mal eine Idee für die
OOP
Class.getAllInstances();
Class.getAllInstancesWhere( <Closure> );
Optional mit oder ohne alle abgeleiteten Instanzen,
da wird es schon wieder etwas schwierig.
3. Thema
Zur Zeit arbeite ich an einem Migrations-Projekt
Etwas ähnlich zu der Sache, die Wolfgang Rostek
hier letztens ansprach:
http://groups.google.de/group/de.comp.lang.java/browse_thread/thread/7ac3b02e1eb1d9c4/225d0a649f152e4c?hl=de&lnk=raot#225d0a649f152e4c
Es sind Daten von einem externen System zu importieren.
Schnittstelle war die Datenbank (JDBC), wenn man da
überhaupt von Schnittstelle sprechen kann
(beim Lesen ist es ok, aber beim Schreiben gibt es
keine fachliche Validierung durch die Fremd-Applikation).
Ausgehend von einem Wurzel-Objekt habe ich die
Daten gelesen und in Value-Objekts verpackt,
die ich dann in die Zielstrukturen übertragen habe.
Dabei waren die externe Seite und die interne
Seite streng getrennt.
Verbindungen habe ich über maps hergestellt,
zum Beispiel
ExternKundeToInternKundeMap.
Diese habe ich mir zum Absichern der Typprüfung
generiert, hier läuft nach Java 1.4 (keine Generics).
Weil ich darauf stehe, sind die Value-Objekts
immutable, wo möglich.
Nun kam ich in Kritik, weil es terminlichen Verzug
und Fehler aufgrund mir nicht bekannter Fachlichkeiten
gab.
Deshalb hat ein Kollege des Kunden angefangen in
meinem Code herumzuwirtschaften, wobei er mir
meine Stil als ungünstig vorhielt.
Zum Beispiel hat er in einem Extern-VO eine
Referenz auf ein Intern-Objekt untergebracht.
Ok, mit get und set, hat er scheinbar mal so
gehört.
Die Extern-VO ist nun nicht mehr von den
Intern-Objekten getrennt und immutable ist sie
auch nicht mehr.
Ich hätte eine Map genommen.
Nun ja, es hat geklappt und ging schnell,
der schnelle Hack ist hier ein Teil der
Firmenkultur. (Die Kollegen debuggen halt gern).
Diese Vorgehensweise wird sogar im Gegensatz zu
meiner Map von der UML gedeckt.
Sehr unbefriedigend.
Was meint Ihr ?
Schönen Sonntag noch.
--
Heiner Kücker
www.heinerkuecker.de
www.control-and-command.de
.
- Follow-Ups:
- Re: [UML] Collections
- From: Thorsten Nitz
- Re: [UML] Collections
- Prev by Date: Re: Unter Windows Prozesse zählen und ggfs. killen
- Next by Date: Re: Annotations abfragen
- Previous by thread: Annotations abfragen
- Next by thread: Re: [UML] Collections
- Index(es):
Relevant Pages
|