marcまたはprotobuf-netの経験がある人へ:
私は、サーバーがクライアントへの(TCPを介した)生涯にわたる持続的接続を保持するアーキテクチャを持っています。接続レイヤー/サーバーは高い稼働時間を必要とするため、メッセージを逆シリアル化してアプリサーバー/レイヤーに渡すだけです。bizロジック自体は含まれていません。
clients -> connection layer (deserialization) -> app layer (business logic)
問題は、bizロジックに変更を加えることはできますが、接続層が逆シリアル化のためにモデルに依存しているため、アプリ層とクライアントによって共有されるモデルを変更できないことです。
転送/ルーティングの目的で、接続レイヤーにメッセージを部分的にのみ基本クラスに逆シリアル化させる方法はありますか?
それ以外の場合は、基本クラス内にバイナリフィールドを作成する必要があると思います。このフィールドはそのまま渡され、アプリ層によって逆シリアル化されます。1段階のシリアル化、2段階の逆シリアル化。
編集:肉付け
class Message
{
User user;
// not much else in here, potentially routing information
}
class RequestType1: Message
{
// lots of fields
// which are specific to this type of request/reply
}
class RequestType2: Message
{
}
接続層は、特定の要求タイプの構造を気にする必要はありません。そうすれば、クライアント層とアプリ層の両方が同意する限り、自由に変更できます。ただし、現在、接続レイヤーは逆シリアル化を実行するため、モデルを知る必要があります。変更を加えると、接続サーバーを再起動する必要があります。
ルーティングするのに十分な逆シリアル化が必要です。つまり、「ユーザー情報」+「サブタイプ名/番号」を意味します。