在微服务之间共享DTO对象
TL; DR-可以在服务之间共享POJO库吗? 通常,如果可能的话,我们希望将服务之间的共享严格限制为无共享。共享数据的服务是否应提供客户端库供客户端使用一直存在争议。客户端库通常对于服务的客户端是可选的,并且可以使用API,但是无论他们愿意使用API,还是使用客户端库还是使用替代语言并使用库的一般方面,等等。 就我而言-我考虑一种创建数据对象的服务。假设此对象是PET。不是数据库实体,而是严格地隐式表示基础数据的POJO。该POJO是API定义的。假设:宠物-年龄,体重,姓名,所有者,地址,种类等。 服务1 -PetKeeper:无论出于何种原因,它都会生成一个pet,并保留所有数据,并且必须引用此服务来获取pet,或者对pet进行修改,可以说名称更改或地址更改必须通过以下方式完成:此服务的API调用。 服务2 -PetAccessor:此服务收集宠物并进行验证检查 服务3,4-更多中间服务呼叫 服务5-用户界面 这些都是很随意的,但重点很简单。UI或某些面向用户的服务希望以某种方式呈现此“ PET”对象。它必须通过API调用一个服务,该服务调用一个服务,再调用一个服务,依此类推,直到到达收集所需信息并开始中继的服务为止。最后,UI服务具有要显示的PET对象。 这很普遍-但出于我们的绝对思想,我们在每次服务中都复制了PET对象。DRY(请勿重复)原则仅适用于服务内的代码,不适用于所有服务,但重点仍然存在。如果我们添加一个字段怎么办...我们必须在每个字段中修改POJO的5个服务。 -或-我们可以提供一个Pet-Objects-Library,其中包含API中的一些pojo,并且每个服务都可以导入/依赖该库。与服务本身无关,而与常规库无关。我喜欢这个想法,以便每个服务都具有相同类型的对象,并且更新更加容易。但是我担心神物。 优点/缺点是什么-最佳设计是什么?您做了什么在服务之间传递数据,以最大程度地减少重复执行相同的POJO类,同时保持解耦状态?