我无法在线找到任何在项目中使用gRPC和protobuf的“最佳实践”。 我正在实现一个事件源服务器端应用程序。 核心定义域聚合,事件和服务,而不具有外部依赖性。 gRPC服务器调用传递请求对象的核心服务,最终转换为正在发布的事件。事件使用protobuf序列化并在线上发布。 我们目前处于两难境地,即我们的事件是否应该是protobuf直接生成的类,或者我们应该将核心和事件分开并实现mapper / serializer层来转换protobuf< - >之间的事件。芯
如果我们没有考虑其他方法,请指导我们:)
感谢您的帮助。
答案 0 :(得分:5)
域模型对象和数据传输对象(Protobuf消息)应尽可能分开。为此,最好的方法是将您的域模型对象转换为Google Protobuf消息,反之亦然。我们制作了protobuf-converter以使其非常简单。
答案 1 :(得分:1)
Protobufs非常适合序列化和向后兼容,但不太适合成为一流的Java对象。目前无法向protos添加自定义功能。你可以通过在存根层使用Protobufs,将它们包装在你的一个事件Pojos中,并在内部传递它们来获得很多好处:
public final class Event {
private final EventProto proto;
public void foo() {
// do something with proto.
}
}
大多数项目都不会经常更改他们的.proto文件,而且几乎不会以向后不兼容的方式(无论是电线还是API)。由于原型更改而不得不更改大量代码,这在我的经验中从来都不是问题。