2016-04-04 14 views
5

プロジェクト内でgRPCとprotobufを使用するための「ベストプラクティス」をオンラインで見つけることができませんでした。 イベントソースのサーバーサイドアプリケーションを実装しています。 コアは、外部の依存関係を持たずにドメイン集約、イベント、およびサービスを定義します。 gRPCサーバーは要求オブジェクトを渡すコアサービスを呼び出し、最終的には公開されるイベントに変換されます。イベントはprotobufを使用してシリアル化され、ワイヤで公開されます。 私たちは、イベントがいるProtobufが直接クラスを生成する必要があるかどうかのジレンマに現在している、あるいは我々は、コアを維持しなければならないとイベントは分離しているProtobuf間でイベントを翻訳するためにマッパ/シリアライザ層を実装< - >コアProtobufクラスとJavaのマッピングフレームワーク/レイヤーを使用する場合

の場合私たちは考慮していない別のアプローチがあります、私たちをご案内ください:

ありがとうございました。

答えて

1

Protobufsはシリアライゼーションと下位互換性には本当に良いですが、ファーストクラスのJavaオブジェクトではそれほど良くありません。 protosにカスタム機能を追加することは現在不可能です。あなたは、スタブ層でProtobufsを使用することによって利益の多くを取得し、あなたのイベントのPOJOの一つでそれらをラップし、そのように周りに内部的にそれらを渡すことができます。

public final class Event { 
private final EventProto proto; 

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

ほとんどのプロジェクトは、自分の.protoファイルを変更しないでくださいそれはしばしば、そしてほぼ決して後方互換性のない方法ではない(ワイヤもAPIもない)。 protoの変更のために多くのコードを変更することは、私の経験では決して問題にはなりませんでした。

3

ドメインモデルはデータ転送オブジェクト(いるProtobufメッセージ)をできるだけ分離しなければならないオブジェクト。このためには、ドメインモデルオブジェクトをGoogle Protobufメッセージに変換することが最善の方法です。我々は非常に簡単にするためにprotobuf-converterを作った。

+0

このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](レビュー/低品質の投稿/ 12314858) – Mike

+1

マイク、私はこの答えが永遠に生きていることを願っていますhttp://stackoverflow.com/questions/11773552/protocol-buffer-and-oo-design/ 37158427#37158427 –

+0

@Mike:質問がアプローチを要求し、回答者がリンクと共にアプローチを概説していることを考えれば、これをリンク専用の答えとして分類しません。 http://meta.stackoverflow.com/questions/287563/youre-doing-it-wrong-a-ple-s-sanity-in-the-low-quality-postsqueueを参照してください。 – gariepy

関連する問題