Ho molti servizi Web in stile REST che supportano le risposte di tipo XML e JSON. Ora devo modificare i servizi Web esistenti in modo tale da fornire il tipo di risposta Protobuf.
Lo sviluppatore che ha sviluppato questi servizi ha creato tre livelli. Service
layer, DAO
layer e Processing
layer.
Il livello di servizio chiama uno dei metodi di elaborazione dei livelli e richiama il livello di elaborazione dei metodi DAO e restituisce JSON o XML type response (POJO) al servizio. Il livello di servizio rinvia quindi questo POJO al client.
Ad esempio, se viene chiamato il servizio per aggiungere list of items
, il codice appare approssimativamente come mostrato di seguito:
@Path("/item")
class ShoppingItemService {
// annotations
public ItemAddResponse addList(/* parameters required for this method */) {
ItemProcessor processor = new ItemProcessor();
ItemAddResponse response = processor.process(/* pass some data to processing layer */);
return Response.ok().format("XML").build(response);
}
}
Qui ItemAddResponse
è già annotato con JAXB
annotazioni di tipo per XML
risposta e altre annotazioni per JSON
risposta.
Non riesco a riutilizzare lo stesso ItemAddResponse
perché Protobuf genera le sue classi utilizzando i file di schema.
La classe processore ha tutta la logica aziendale e se voglio aggiungere il supporto per Protobuf allora ho creato un nuovo metodo nel processore e copia-incolla quasi tutta la logica aziendale, ma restituisco solo l'oggetto della classe generata da protobuf.
Questo approccio richiede molto tempo e ci sono almeno 50 metodi simili in cui devo fare il lavoro di copia-incolla. Voglio evitare questo e vorrei progettare una soluzione elegante.
Mi piacerebbe sapere come posso aggiungere supporto per Protobuf con quantità minime di modifiche?
Sto leggendo Head First Design patterns
book ma questo libro è davvero enorme e ci vorrà molto tempo per trovare un modello di design adeguato.
Esiste qualche schema di progettazione che può essere utile in questo tipo di situazioni?
Grazie,
Chandrashekhar