2009-11-25 13 views
14

Stiamo introducendo i buffer di protocollo come nuovo trasporto per alcuni servizi RPC back-end. Poiché non esiste resistenza al trasferimento manuale dei dati tra diverse forme di oggetti simili, posso prevedere che le istanze di Protocol Buffer siano passate allo stack un po 'più in alto rispetto all'interfaccia del server RPC.Utilizzo del buffer del protocollo come oggetto dati generale?

È qualcosa che dovrei cercare di evitare? È sicuro trattare un oggetto buffer di protocollo come un semplice titolare di dati, con la piacevole convenienza di poter essere trasformato in modo rapido ed efficiente in e fuori dal binario?

L'altro motivo per cui considero un buon modo per generare oggetti dati è la nozione di campi obbligatori/facoltativi e l'interfaccia del generatore generata automaticamente.

risposta

9

Beh, non sono terribilmente comodo da usare in quel modo in quanto sono immutabili - è possibile passare i builder in giro, ma ciò rende piuttosto lunghi i nomi dei tipi. Significa anche che sei limitato ai tipi di dati supportati dai buffer di protocollo (e dai tuoi messaggi).

È sicuro per fare questo, ma non crea sempre i disegni più belli. D'altra parte, a volte è proprio quello che il medico ha ordinato :)

Ti suggerisco di sperimentare - non c'è "una taglia unica" qui.

+0

Penso che il fatto che siano immutabili effettivamente aiuta, e non fa male, quando si tratta di utilizzare buffer di protocollo come questo. Sono oggetti di valore immutabili proprio come String. –

+0

In alcuni casi è certamente utile quando è possibile scrivere codice in uno stile funzionale. In parte dipende dal problema e in parte dagli sviluppatori :) –

+0

Immutable aiuta davvero in alcuni casi, per ragioni sconosciute esistono alcune costruzioni pubbliche con una dozzina di + o più parametri, tutti assegnati ai campi finali. Un costruttore è grande ma noioso e pronto a scrivere ogni volta. È anche difficile ottenere la logica del diritto richiesto e facoltativo, in modo tale che il metodo build() esploda se i campi richiesti sono stati omessi. –

0

In generale, disegno gli strati dei miei sistemi in modo che i dettagli di implementazione da uno strato non si perdano l'un l'altro. Non ho esperienza diretta dei Protocol Buffers di Google, ma sembra che tu voglia usare la stessa rappresentazione per il trasporto e ai livelli più alti del tuo sistema.

Se si è deciso di interrompere l'uso dei protocol buffer come rappresentazione del trasporto, quanto sarebbe facile utilizzare qualcos'altro?

+0

Questo è in realtà un passo verso esattamente questo. In questo momento un insieme di interfacce impone il nostro livello dati, il back-end RPC * e * per estendere un livello di servizio Web RESTful. *DOLORE*. Il passo 1 è quello di sostituire il back-end con i buffer del protocollo per disaccoppiarlo dal resto. Ma questo è un punto eccellente. Se passo tutto a protobufs, l'unica cosa che ho disgiunto è il collegamento tra client e servizi RPC mentre tutti gli altri livelli dipenderanno dagli oggetti Messaggio ... BAD. –

Problemi correlati