Modello di progettazione per la conversione di oggetti (java)


21

Non uso molto spesso i modelli di progettazione, oltre a una fabbrica occasionale e MVC, e voglio iniziare a usarli di più.

Ho a portata di mano un caso concreto in cui vorrei la tua opinione sull'uso dei modelli di progettazione in questo caso.

Nella mia applicazione devo convertire oggetti abbastanza spesso in diverse situazioni. Potrei dover convertire un POJO Hibernate in un DTO, perché utilizzo GWT e i POJO Hibernate non sono serializzabili e non possono essere inviati tramite la linea.

In un'altra situazione, potrebbe essere necessario convertire gli oggetti Java in SolrInputDocument per l'indicizzazione di Solr.

Vorrei sapere se per questo dovrei usare un modello di progettazione. Sembra che la "conversione di oggetti" sia un'attività generica che potrebbe essere gestita in modo flessibile / astratto da un modello, ma non vedo davvero come.

Senza schemi, creerei semplicemente una classe separata per ogni tipo di conversione, ad esempio CourseToSolrInputDocument (Il corso è un'entità ibernazione nella mia applicazione). O CourseToCourseDTO. Ognuna di queste classi di conversione potrebbe avere un singolo metodo statico chiamato convert()che accetta l'oggetto di origine come input e restituisce l'oggetto di output.

Ma questo non è proprio uno schema, vero? Quindi ho iniziato con qualcosa di generico e ho creato questa classe che implementa l'interfaccia del convertitore. Ma in qualche modo sembra sciocco creare un'interfaccia generica e non vedo davvero il vantaggio se non quello di poter congratularmi con me stesso per l'uso dei farmaci generici.

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.
    }
}

Quindi, la vera domanda qui è: esiste un modello che si applica alla conversione di oggetti generici e quale sarebbe il tuo approccio e quali sono i vantaggi rispetto all'uso di un solo approccio di tipo per classe di conversione?


I modelli sono più nomi di ciò che fai (ed esempio come farlo correttamente), che qualcosa di straordinario da usare. Quindi la domanda migliore di come posso usare più schemi è: quali schemi uso già (forse in modo incompleto / contorto).
user470365

Risposte:


18

Il modello del traduttore è ciò che stai chiedendo.

Ma sospetto che quello che stai cercando sia un framework, più che uno schema. Credo che Dozer sia popolare nel mondo Java.


Conosco Dozer e Apache Beanutils. Vorrei utilizzare uno di quelli all'interno della mia "struttura di conversione". Nel frattempo ho scoperto che Spring offre una soluzione per convertire oggetti che possono essere trovati qui: static.springsource.org/spring/docs/3.0.0.RC3/reference/html/… . L'avevo visto prima, ma molto tempo fa, quindi la mia interfaccia era in qualche modo basata su ciò che ricordavo da Spring. Vado con la soluzione Spring, perché Spring è già nel mio progetto e sembra un buon approccio.
Giulio
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.