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?