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?