在微服务之间共享DTO

时间:2020-03-26 10:12:29

标签: maven microservices dto

我们大约有15个微服务,它们彼此通信并在彼此之间交换DTO。在我们的项目中,很常见的是,一个DTO用于多个微服务中。 因此,我们问自己如何定义DTO。 当然,第一种方法是彼此独立地定义每个微服务中的DTO。这种方法非常简单,但是有几个缺点。每次我们想要在一项服务中更改DTO时,我们也必须在另一项服务中更改它。

我们的第二种方法是: 我们创建了几个Maven项目。这个Maven项目仅包含DTO,这些DTO在服务之间共享。 因此,假设我们有服务1、2、3、4、5和DTO A,B和C。假设DTO A在服务1和2之间共享。DTOB和C在服务3、4和5之间共享。在这种情况下,我们将创建两个Maven依赖关系,第一个依赖关系包含DTO A,将包含在服务1和2中。第二个依赖关系将包含DTO B和C,并将包含在服务3、4、5中。

这种方法减少了代码重复,因为如果我们更新DTO,我们只需要更新相应的maven依赖项的版本号即可。另一方面,我们仍然必须接触每项服务以更新依赖关系。

另一个缺点如下。首先,我们认为服务1和服务2将仅使用DTOA。一段时间后,添加了新的要求,现在DTO A应该依赖于DTOB。 因此,让我们想象一下,DTO A是具有领域(品牌,建设年份)的车辆,DTO B是具有领域(功率)的电动机。 因此,假设在服务2和3之间交换了电动机DTO。在服务1和2之间交换了车辆DTO。过了一段时间,我们收到要求,车辆DTO应该换上新的现场电动机。所以现在我们有两个选择:

选项1: 我们让车辆DTO依赖于马达DTO。 选项2: 我们创建了另一个电机DTO(Motor2),它包含在车辆DTO中,因此我们有两个电机DTO,而车辆不依赖于初始电机DTO。

选项1的优点是,我们没有任何代码重复。缺点是,两个dto都在单独的Maven项目中,很难维护它们。因为如果更改一个dto,则必须更新依赖项的版本。

选项2的优点是dto彼此独立。但是,如果有变化,我们必须触摸几个地方。当然,在两种服务中更改一个DTO很容易。但是,如果更改影响到少数DTO(在四个或五个服务之间交换),则可能会很烦人。 尤其常见的是,在项目开始时,需求变化很快。

那么您在微服务/系统之间交换DTO的经验是什么?您采用哪种方法,这种方法的优点或缺点是什么?

0 个答案:

没有答案