使用Protobuf类与在Java中具有映射框架/层

2022-09-03 15:36:47

我无法在网上找到任何在项目中使用gRPC和protobuf的“最佳实践”。我正在实现一个事件源服务器端应用。核心定义了域聚合、事件和服务,而没有外部依赖项。gRPC 服务器调用传入请求对象的核心服务,这些请求对象最终转换为要发布的事件。事件使用protobuf进行序列化并发布在网络上。我们目前处于两难境地,即我们的事件是否应该直接成为protobuf生成的类,或者我们应该将核心和事件分开,并实现映射器/序列化器层来转换protobuf<>核心之间的事件。

如果我们没有考虑其他方法,请指导我们:)

感谢您的帮助。


答案 1

域模型对象数据传输对象(Protobuf 消息)应尽可能分开。为此,最好的方法是将您的域模型对象转换为Google Protobuf消息,反之亦然。我们制作了一个原型buf转换器,使其非常简单。


答案 2

Protobufs对于序列化和向后兼容性来说非常好,但不太擅长成为一流的Java对象。目前无法向 protos 添加自定义功能。通过在存根层使用Protobufs,将它们包装在其中一个事件Pojos中,并在内部传递它们,您可以获得很多好处:

public final class Event {
 private final EventProto proto;

 public void foo() {
   // do something with proto.
 }
}

大多数项目不会经常更改其.proto文件,并且几乎从不以向后不兼容的方式(既不是wire也不是API)更改。根据我的经验,由于原型更改而必须更改大量代码从来都不是问题。


推荐