我应该将 gRPC protobuf 消息转换为 DTO 吗?- 最佳实践

USe*_*299 6 java design-patterns grpc protobuf-java

最近,我开始使用 gRPC 消息与微服务交互。到目前为止,我一直在使用带有 DTO 的 REST API,并在代码本身中不断进行解耦和封装。

现在,我在使用 gRPC protobuf 消息时,我开始想知道什么 shell 是这里的最佳实践 - 在大声思考时,我会说,当在应用程序的入口点获取消息时,最好是将其转换从另一个角度来看,我只是将对象转换为对象,并想知道这些开销是否是强制性/必需的

期待您对此的想法:)

Par*_*rai 4

好吧,这取决于您的要求以及您的服务需要如何解耦(从长远来看)。据我所知,一些服务/人们甚至倾向于将原型直接写入数据库(即以原型字符串/字节字符串或字节[]形式)以减少映射开销以及我猜测的其他原因。

话虽如此,我个人认为领域模型数据传输对象(Protobuf Message) 应该尽可能分开。因此,最好为您的请求和响应提供额外的映射,这将有助于您将来对 IDL 或原型定义进行更改。

如果您完全依赖资源/api 层实现(在您的情况下是 gRPC),即使是一个小的库更新也可能会破坏一些东西,并且遍历所有使用原型模型的地方会很麻烦

此外,它可以帮助您轻松适应变化,就像您的系统选择完全依赖另一个 API 模式一样

最后,我认为没有任何硬性规则需要遵循,但这完全取决于您和您的要求,但最好将其转换为您自己的模型而不是直接使用它,这样您可以更好地控制 api层和业务层的隔离从长远来看确实很重要。