現在のデザイン
ユーザーにイベントのフィードを返すいくつかの既存の API コードをリファクタリングしています。API は通常の RESTful API であり、現在の実装は単純に DB にクエリを実行してフィードを返します。
コードは長くて面倒なので、API サーバーから呼び出されるマイクロサービスにフィード生成を移動することにしました。
新しいデザイン
デカップリングのために、データは API サーバーとマイクロサービスの間を Protobuf オブジェクトとして行き来する可能性があると考えました。このようにして、どちらかの側でプログラミング言語を変更しても、protobuf の型安全性とスリムなサイズを楽しむことができます。
問題
フィードには複数のタイプ (いいね、画像、音声メッセージなど) が含まれます。将来的には、新しいタイプが追加される可能性があります。それらはすべて、タイムスタンプとタイトルなどのいくつかのプロパティを共有していますが、それ以外は完全に異なる場合があります。
従来の OOP では、解決策は単純ですFeedItem
。すべてのフィード項目が継承される基本クラスとFeed
、一連のクラスを含むFeedItem
クラスです。
Protocol Buffers 3 でポリモーフィズムの概念をどのように表現するか、または少なくともリスト内のさまざまな種類のメッセージを有効にするにはどうすればよいですか?
何をチェックしたか
Oneof
: 「oneof を繰り返すことはできません」。Any
: 広すぎる (Java のList<Object>
.