Entwurfsmuster für Objektkonvertierung (Java)

21

Abgesehen von gelegentlichen Factory- und MVC-Mustern verwende ich Designmuster nicht sehr oft und möchte sie auch häufiger verwenden.

Ich habe einen konkreten Fall zur Hand, in dem ich Ihre Meinung zur Verwendung von Entwurfsmustern in diesem Fall äußern möchte.

In meiner Anwendung muss ich Objekte ziemlich oft in verschiedenen Situationen konvertieren. Möglicherweise muss ich ein Hibernate-POJO in ein DTO konvertieren, da ich GWT- und Hibernate-POJOs verwende, die nicht serialisierbar sind und nicht über die Leitung gesendet werden können.

In einer anderen Situation muss ich möglicherweise Java-Objekte in SolrInputDocument konvertieren, damit Solr sie indiziert.

Ich würde gerne wissen, ob ich dafür ein Entwurfsmuster verwenden soll. Es scheint, dass "Objektkonvertierung" eine generische Aufgabe ist, die flexibel / abstrakt durch ein Muster gehandhabt werden könnte, aber ich verstehe nicht wirklich, wie.

Ohne Muster würde ich nur eine separate Klasse für jede Art der Konvertierung erstellen, zum Beispiel CourseToSolrInputDocument (Course ist eine Entität im Ruhezustand in meiner Anwendung). Oder CourseToCourseDTO. Jede dieser Konvertierungsklassen verfügt möglicherweise über eine einzelne statische Methode convert(), die das Quellobjekt als Eingabe verwendet und das Ausgabeobjekt zurückgibt.

Aber das ist nicht wirklich ein Muster, oder? Also habe ich etwas mit Generika angefangen und diese Klasse erstellt, die die Konverter-Schnittstelle implementiert. Aber irgendwie fühlt es sich albern an, ein generisches Interface zu erstellen und ich sehe den Vorteil nicht wirklich anders, als mich selbst zum Einsatz von Generika beglückwünschen zu können.

public class CourseToSolrInputDocument implements Converter<Course, SolrInputDocument>         {
    @Override
    public void convert(Course source, SolrInputDocument destination) {
        //To change body of implemented methods use File | Settings | File Templates.
    }
}

Die eigentliche Frage hier ist also: Gibt es ein Muster, das für die generische Objektkonvertierung gilt, und wie würden Sie vorgehen und welche Vorteile haben Sie gegenüber der Verwendung eines Konversionstyp-Konversionsansatzes?

Julius
quelle
Muster sind eher Namen für das, was Sie tun (und ein Beispiel dafür, wie Sie es richtig machen), als etwas, das man nur schwer benutzen kann. Eine bessere Frage als die, wie ich mehr Muster verwenden kann, ist: Welche Muster verwende ich bereits (möglicherweise auf eine unvollständige / verschlungene Weise).
user470365

Antworten:

18

Das Übersetzermuster ist das, wonach Sie fragen.

Aber ich vermute, dass Sie nach einem Framework suchen, mehr als nach einem Muster. Ich glaube, Dozer ist in der Java-Welt beliebt.

pdr
quelle
Ich kenne Dozer und Apache Beanutils. Ich möchte eine davon in meiner "Konvertierungsstruktur" verwenden. In der Zwischenzeit habe ich festgestellt, dass Spring eine Lösung zum Konvertieren von Objekten bietet, die hier zu finden ist: static.springsource.org/spring/docs/3.0.0.RC3/reference/html/… . Ich hatte es vor langer Zeit gesehen, also basierte meine eigene Oberfläche auf dem, woran ich mich von Spring erinnerte. Ich werde mich für die Spring-Lösung entscheiden, da Spring bereits in meinem Projekt enthalten ist und es nach einem guten Ansatz aussieht.
Julius