maven - 在微服务之间共享 DTO
问题描述
我们有大约 15 个微服务,它们相互通信并相互交换 DTO。在我们的项目中,一个 DTO 用于多个微服务是很常见的。所以我们问自己如何定义 DTO。第一种方法当然是在每个微服务中相互独立地定义 DTO。这种方法非常简单,但有几个缺点。每次我们想在一个服务中更改 DTO 时,我们也必须在另一个服务中更改它。
我们的第二种方法如下:我们创建了几个 Maven 项目。这个 maven 项目只包含 DTO,它们在服务之间共享。因此,假设我们有服务 1、2、3、4、5 和 DTO A、B 和 C。假设 DTO A 在服务 1 和 2 之间共享。DTO B 和 C 在服务 3、4 和 5 之间共享。在这种情况下,我们将创建两个 maven 依赖项,第一个具有 DTO A,将包含在服务 1 和 2 中。第二个依赖项将包含 DTO B 和 C,并将包含在服务 3、4、5 中。
这种方法减少了代码重复,因为如果我们更新一个 DTO,我们只需要更新相应的 maven 依赖项的版本号。另一方面,我们仍然需要接触每个服务来更新依赖关系。
另一个缺点可能如下。首先我们认为,服务 1 和服务 2 将只使用 DTO A。经过一段时间添加了新要求,现在 DTO A 应该依赖于 DTO B。所以让我们想象 DTO A 是具有字段(品牌、建筑年份)和 DTO 的车辆B 是带磁场的电机(功率)。因此,假设电机 DTO 在服务 2 和 3 之间交换。车辆 DTO 在服务 1 和 2 之间交换。一段时间后,我们收到一个要求,即车辆 DTO 应该获得一个新的现场电机。所以现在我们有两个选择:
选项 1:我们让车辆 DTO 依赖于电机 DTO。选项 2:我们创建另一个电机 DTO (Motor2),它包含在车辆 DTO 中,因此我们有两个电机 DTO,并且车辆不依赖于初始电机 DTO。
选项 1 的优点是,我们没有任何代码重复。缺点是,这两个 dto 都在单独的 maven 项目中,并且很难维护它们。因为如果我们更改一个 dto,我们必须更新依赖的版本。
选项 2 的优点是 dto 彼此独立。但是如果有变化,我们就得摸几个地方。当然,在两个服务中更改一个 DTO 很容易。但是,如果更改影响了少数 DTO,它们在四到五个服务之间进行交换,那可能会非常烦人。尤其是在项目开始时,需求变化非常快是很常见的。
那么您在微服务/系统之间交换 DTO 的经验是什么?您遵循哪种方法,您的方法有哪些优点或缺点?
解决方案
推荐阅读
- node.js - 安装了最新的 node-sass 但项目不断尝试安装 node-sass 4.9.0
- godot - 我在 Youtube 上的一个视频的帮助下制作了一个 Godot 平台游戏我做了和他一样的一切,但我的角色拒绝向左移动
- python-3.x - 如何在 python 中计算 2、2D kde 图之间的公共体积/交集?
- javascript - 用户登录后如何打开侧边栏选项卡
- macos - cmake:如何在 macOS 上的应用程序包中找到二进制文件?
- django - Pinax npm 安装失败
- c# - C#:无法从 JSON 字符串中获取子值
- python - Odoo划分两个浮点字段 - AttributeError
- java - 在 Windows 上使用 JPackage 是否可以让 main .exe 不作为控制台运行,但让其他 laucher 作为控制台运行?
- c# - 以编程方式获取 Azure 应用服务本地磁盘使用情况