当前位置: 首页 > 知识库问答 >
问题:

使用原型类与在Java中拥有映射框架/层

金理
2023-03-14

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

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

谢谢你的帮助。

共有2个答案

韦睿
2023-03-14

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

public final class Event {
 private final EventProto proto;

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

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

岳晟
2023-03-14

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

 类似资料:
  • 我在目标语言为python的swig接口文件中成功地使用了以下类型映射: 然而,当我将目标语言更改为java时,当我尝试构建swg生成的自动生成的c包装代码时,我会遇到很多编译时错误,即。 等等... 我注意到,在python案例中,粘贴到swig包装器代码中的代码包含,等声明,这些代码来自 它位于 当目标语言为java时,此等效代码不会粘贴到swig包装器代码中。我不完全确定为什么不会发生这种情

  • 本文向大家介绍Java的MyBatis框架中Mapper映射配置的使用及原理解析,包括了Java的MyBatis框架中Mapper映射配置的使用及原理解析的使用技巧和注意事项,需要的朋友参考一下 Mapper的内置方法 model层就是实体类,对应数据库的表。controller层是Servlet,主要是负责业务模块流程的控制,调用service接口的方法,在struts2就是Action。Ser

  • 我有一个场景,我必须使用Mapstrt将对象(来自网络请求)转换为对象(数据层)来处理对象映射。我正在尝试创建一个通用的接口,以防止必须为每个资源定义自定义映射器,如下所示: 但这会导致构建错误(但是编译成功): 错误:(13,4)错误:无法为泛型类型变量源生成映射方法。 这不可能吗?如果没有,我将不得不为每个创建一个自定义映射器,并使用根据类类型等告诉反序列化器要使用哪个映射器。。。它可能会变得

  • 问题内容: 拥有方到底是什么意思?一些映射示例(一对多,一对一,多对一)的解释是什么? 以下文本摘录自Java EE 6文档中@OneToOne的描述。您可以在其中看到概念拥有方面。 定义与另一个具有一对一多重性的实体的单值关联。通常不必显式指定关联的目标实体,因为通常可以从被引用对象的类型中推断出该目标实体。如果关系是双向的,则非拥有方必须使用OneToOne批注中的mappingBy元素来指定

  • 本文向大家介绍详解Java的MyBatis框架与Spring框架整合中的映射器注入,包括了详解Java的MyBatis框架与Spring框架整合中的映射器注入的使用技巧和注意事项,需要的朋友参考一下 MyBatis-Spring允许你在Service Bean中注入映射器。当使用映射器时,就像调用DAO那样来调用映射器就可以了,但是此时你就不需要进行任何DAO实现的编码,因为MyBatis会为你进

  • 我使用javap反编译了Map类。类定义仍然显示泛型类型K和V的存在。这应该被类型擦除的概念擦除。为什么没有发生这种情况? <代码>/javap-详细java。util。地图