我在客户端-服务器架构中使用协议缓冲区作为有线数据格式。域对象(java bean)将经历以下生命周期。
- 用于客户端业务逻辑
- 转换为 protobuf 格式
- 传送到服务器
- 转换回域对象
- 用于服务器端业务逻辑
ProtoBuf 文档中的“协议缓冲区和 OO 设计”部分建议将生成的类包装在适当的域模型中。
我想找出最好的方法。
例如,我有一个简单的原型定义。
package customer;
option java_package = "com.example";
option java_outer_classname = "CustomerProtos";
message Customer {
required string name = 1;
optional string address = 2;
}
这就是定义域模型的方式。如您所见,数据完全存储在 proto builder 对象中。
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格式。
访问 proto builder 类 getter/setter 方法时是否存在任何性能问题,特别是当 proto 定义复杂且嵌套时?