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

Java微服务体系结构中的公开域模型

归泽宇
2023-03-14

我知道将实体类和属性复制到DTOs中被认为是反模式,因此通过公开域模型模式,相同的@entity既可以用作数据库实体类,也可以用作服务层和MVC层的DTO。(参见https://codereview.stackexchange.com/questions/93511/data-transfer-objects-vs-entities-in-java-rest-server-application)

但是假设我们有一个微服务体系结构,其中同一组属性在一个具有持久性的项目中用作实体,在另一个项目中用作DTO,该项目将第一个属性用作服务。在这种情况下,建议的模式是什么?因为第二个项目不需要@entity相关的功能,而且如果我们将该类放在共享库中,那么它将不必要地与特定于JPA的API和库绑定。另一种选择是再次使用单独的DTO类反模式。

共有1个答案

仲承福
2023-03-14

当您对DTO模型的需求与您的实体模型完全匹配时,您要么处于项目的早期阶段,要么非常幸运地拥有一个简单的模型。如果您的模型非常简单,那么DTOs不会给您带来很多立竿见影的好处。

但是,在某些时候,DTO模型和实体模型的需求会有所不同。想象一下,在实体/持久性模型中添加一些审计方面、统计信息或反规范化。这种数据通常不会直接通过DTOs公开,所以您需要拆分模型。通常情况下,DTOs的主要驱动因素是您不需要所有的数据。如果您在例如下拉列表中显示对象,您只需要一个标签和对象id,那么为什么要为这样的用例加载整个实体状态呢?

DTO模型上有注释这一事实应该不会太困扰您,还有什么替代方案呢?类似XML的映射?手动物体布线?如果您的模型是由第三方直接使用的,您可以使用子类,即保持主模型没有注释,并在您的项目中有注释的子类来扩展主模型。

 类似资料:
  • 我有一个微服务体系结构,它的日志必须发送到远程Kafka主题。在它旁边,本主题的使用者将把日志发送到麋鹿堆栈(另一个团队) 我想要一个专用的微服务(fwk proxy elasticsearch),其职责是收集其他人的日志,并将其发送到远程Kafka主题。 将从我的微服务聚合的所有日志分派到fwk-代理-弹性搜索微服务的最佳协议是什么? 我希望这个模式不会重复远程Kafka主题的安全配置。我想把它

  • 我最近开始使用Node.js,我必须构建一个应该使用多个Express.js服务的体系结构。其中一些服务必须位于一台服务器上,另一台则位于其他服务器上。我想构建一个基础服务(像API网关),但是我不知道在这个网关和微服务之间,或者在两个微服务之间进行通信的合适方式是什么。 目前我正在研究一个基于此的解决方案:

  • 总而言之,我们有: 产品类别: 产品ID、产品名称 订单类别: 订单ID、产品ID、用户ID、订单日期 这些方法中的任何一种可以被认为是最佳实践吗?还是有不同的解决方案?

  • 我经常听说,在微服务架构中,对于每一个微服务,我们都必须创建单独的数据库。 但是,如果我必须在不同的数据库中维护外键约束,这是不可能的。就像我在身份验证微服务中有一个用户表,我想在我的目录服务中使用它(用户表中的用户 ID 列) 那么如何解决呢。 感谢提前

  • null null myApp应用程序不能直接访问用户数据库,所有通信都只能通过用户认证微服务处理。 在过去的一周里,我广泛阅读了关于REST API中的授权/身份验证的内容,但仍然不知道如何为User->myApp和MyApp->User-Authentication微服务构建一个可靠的授权/身份验证系统。 这是我现在想出来的。 null Now, user signs in sending u