14

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

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

谢谢您的帮助。

4

2 回答 2

8

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

于 2016-05-11T09:58:51.760 回答
1

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

public final class Event {
 private final EventProto proto;

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

大多数项目不会经常更改他们的 .proto 文件,而且几乎从不以向后不兼容的方式(无论是有线还是 API)。根据我的经验,由于原型更改而不得不更改大量代码从来都不是问题。

于 2016-04-19T15:09:49.810 回答