2016-04-04 24 views
5

Non sono riuscito a trovare alcuna "procedura ottimale" online per l'utilizzo di gRPC e protobuf all'interno di un progetto. Sto implementando un'app lato server lato evento. Il nucleo definisce i domini aggregati, eventi e servizi senza avere dipendenze esterne. Il server gRPC chiama i servizi di base che passano in oggetti di richiesta che alla fine si traducono in eventi che vengono pubblicati. Gli eventi sono serializzati usando protobuf e pubblicati sul filo. Siamo attualmente in un dilemma se i nostri eventi devono essere la protobuf generato classi direttamente, o dovremmo mantenere il nucleo e eventi separati e attuare uno strato mapper/serializzatore di tradurre eventi tra protobuf < -> nucleoUtilizzo delle classi Protobuf rispetto a un framework/strato di mappatura in Java

Se c'è un altro approccio che non stiamo considerando, per favore guidaci :)

Grazie per l'aiuto.

risposta

1

I protobuf sono davvero ottimi per la serializzazione e la compatibilità con le versioni precedenti, ma non così tanto da essere oggetti Java di prima classe. Al momento non è possibile aggiungere funzionalità personalizzate a protos. È possibile ottenere un sacco di vantaggi utilizzando Protobufs a livello di stub, avvolgerli in uno del vostro evento Pojos, e passarli intorno internamente come ad esempio:

public final class Event { 
private final EventProto proto; 

public void foo() { 
    // do something with proto. 
} 
} 

maggior parte dei progetti non cambiano il loro file di Proto che spesso, e quasi mai in un modo incompatibile all'indietro (né filo né API). Ho dovuto cambiare un sacco di codice a causa delle modifiche di proto non è mai stato un problema nella mia esperienza.

3

Domain Model Oggetti e Transfer Data Objects (Protobuf messaggio) opportuno separare il più possibile. Per questo il modo migliore è trasformare i tuoi oggetti modello di dominio in messaggi Protobuf di Google e viceversa. Abbiamo creato uno protobuf-converter per renderlo estremamente semplice.

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/12314858) – Mike

+1

Mike, spero che questa risposta sia viva per sempre http://stackoverflow.com/questions/11773552/protocol-buffer-and-oo-design/ 37158427 # 37158427 –

+0

@Mike: Dato che la domanda richiede un approccio e il responsabile della risposta ha delineato l'approccio insieme al collegamento, non lo classificherei come una risposta "solo link". Vedi http://meta.stackoverflow.com/questions/287563/youre-doing-it-wrong-a-plea-for-sanity-in-the-low-quality-posts-queue – gariepy