Mag*_*ero 6 java serialization protocol-buffers
我想在Java应用程序中使用protobuff来促进序列化,我对Google网站上的这句话有疑问
协议缓冲区和OO设计协议缓冲区类基本上是哑数据持有者(如C++中的结构); 他们没有在对象模型中成为优秀的一等公民.如果要为生成的类添加更丰富的行为,最好的方法是将生成的协议缓冲区类包装在特定于应用程序的类中.如果您无法控制.proto文件的设计(例如,如果您正在重用另一个项目中的一个),那么包装协议缓冲区也是一个好主意.在这种情况下,您可以使用包装器类来创建更适合应用程序的独特环境的接口:隐藏一些数据和方法,公开便利功能等.您永远不应该通过继承它们来向生成的类添加行为.
来自:http://code.google.com/apis/protocolbuffers/docs/javatutorial.html
它说要包装创建的类是什么意思?
Ara*_*ram 11
观点1
您编写.proto文件并将其提供给生成Builder代码的protoc.他们建议不要在生成的代码中添加任何方法.如果你想要将一些自定义行为添加到生成的代码中,那么写下你自己的CLASSPING生成的代码.
例如,让我们说protoc生成的类是MyMessageBuilder.并且您想要添加一个方法,该方法可以将XML输入和spitout特定于protobuff的消息输出.你可以编写一个XmlToMyMessageBuilder,如下所示.在这里使用XmlToMyMessageBuilder,您的类将包装生成的代码并从Xml()添加自定义行为.
public class XmlToMyMessageBuilder
{
private final MyMessageBuilder protoBuilder;
public MyMessage fromXml(byte[] input()
{
protoBuilder.setXXX();
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个很好的编程原则.
观点2
通过提供中介,您还可以从底层序列化机制中解除代码.这允许您切换序列化程序实现(假设您要序列化有效负载,其中所有数据都是字符串格式...其中JSON序列化与压缩是一个更好的选择),影响很小.你可以这样做
public interface MySerializer
{
boolean serialize(MyDomainObject input);
}
public PBBasedSerializer implements MySerializer
{
private final MyMessageBuilder protoBuilder;
...
}
public JsonBasedSerializer implements MySerializer
{
private final JSONSerializer jsonSerializer;
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7520 次 |
| 最近记录: |