クライアントサーバーアーキテクチャのワイヤデータ形式としてプロトコルバッファを使用しています。ドメインオブジェクト(Java Beans)は、次のライフサイクルを通過します。
- クライアント側のビジネスロジックで使用
- protobuf形式に変換
- サーバーに送信
- ドメインオブジェクトに変換して戻す
- サーバー側のビジネスロジックで使用
ProtoBufドキュメントの「ProtocolBuffersandOO Design」セクションでは、生成されたクラスを適切なドメインモデル内にラップすることを推奨しています。
最高のアプローチを見つけたいと思います。
たとえば、私は単純なプロト定義を持っています。
package customer;
option java_package = "com.example";
option java_outer_classname = "CustomerProtos";
message Customer {
required string name = 1;
optional string address = 2;
}
これがドメインモデルの定義方法です。ご覧のとおり、データは完全にプロトビルダーオブジェクトに保存されています。
package com.example;
public class CustomerModel
{
private CustomerProtos.Customer.Builder builder = CustomerProtos.Customer.newBuilder();
public String getName()
{
return builder.getName();
}
public void setName(String name)
{
builder.setName(name);
}
public String getAddress()
{
return builder.getAddress();
}
public void setAddress(String address)
{
builder.setAddress(address);
}
public byte[] serialize()
{
return builder.build().toByteArray();
}
}
これは良い習慣ですか?これらのオブジェクトはライフサイクルのすべてのフェーズで使用されますが、クライアント/サーバー送信フェーズで必要なのはprotocolbuf形式のみであるためです。
特にプロト定義が複雑でネストされている場合に、プロトビルダークラスのゲッター/セッターメソッドにアクセスするときにパフォーマンスの問題はありますか?