Hallo anda_skoa,
zuerst einmal vielen Dank, für Deinen Beitrag. Nachfolgend ein etwas längerer Text. Aber wegen der zentralen Bedeutung der Typsicherheit in Java, wollte ich daß Problem etwas genauer schildern.
Ich habe mein Programm in Schichten aufgebaut. Einem DAO-Layer, für die Zugriffe auf die Datenbank, eine Logik-Schicht für die Businesslogic und einer Präsentationsschicht.
Der DAO-Layer arbeitet mit Hibernate.
Aus der Datenbank hole ich Objekte, die mit Hibernate gemapped wurden. Über die Businesslogik greife ich auf die Datenbank zu und erhalte Objekte verschiedener Klassen zurück. So bekomme ich zB ein Objekt der Klasse ClassA (objectA)zurück und eine List von Objekten von der Klasse ClassB (List<ClassB>listB). In der Businesslogic übergebe ich diese Objekte HashMaps.
Code:
HashMap<String,Object>map=new HashMap<String,Object>();
map.put(ClassA.getSimpleName(),objectA);
map.put(ClassB.getSimplenName(),listB);
Diese HashMaps übergebe ich nun der Präsentationsschicht, in der sie in DTO-Objekte, zur Weiterleitung an die GUI, umgewandelt werden.
Code:
ClassADTO objectADTO=ConverterClassA.buildDTO();
List<ClassBDTO>listDTO=ConverterClassB.buildDTOList();
Diese DTOs fasse ich dann in weitere DTOs zusammen; zB:
Code:
ContainerDTO containerDTO=new ContainerDTO();
containerDTO.setObjectA(objectADTO);
containerDTO.setListObjectB(listDTO);
und leite sie an die GUI weiter.
Durch die Verwendung von HashMaps in der Logikschicht erspare ich mir ähnliche Containerklassen, wie in der Präsentationsschicht. Durch diese Vorgehensweise kann die Applikation einfach von einer Swingoberfläche auf ein Webinterface umgestellt werden. Man muß lediglich die Convertierung ändern und ein geeignetes Format wählen.
So könnten die HashMaps aus der Logikschicht, in Servlets in JSON-Format gebracht werden und an einen Webclient übertragen werden. Auf doe Logikschicht und den DAOs hat dies keinen Einfluss.
Durch Einführung geeigneter Klassen, die die Ergebnisse der Logik zusammenfassen, wäre mein Problem gelöst. Diese wollte ich mir einfach sparen. Außerdem leisten die HashMaps genau das was ich brauche. Diese nun durch weitere Klassen zu ersetzen empfinde ich als unnötige Verkommplizierung des Programms. Und dies nur wegen der
Typsicherheit. In den meisten Fällen ist die Typsicherheit gut und wünschenswert. Manchmal aber auch eine Einschränkung der Möglichkeiten.
mfg
anunnaki
Lesezeichen