【发布时间】:2019-07-22 10:43:50
【问题描述】:
我正在开发三个微服务
- 查看优惠
- 添加优惠(针对管理员)
- 选择优惠
查看报价用于向客户显示报价,并添加服务管理员用于将报价链接到客户的报价,如果报价链接到客户,查看报价将返回该报价作为响应。客户使用 Opt 优惠来享受优惠。
在设计时,我意识到所有 3 个服务共享相同的功能,但也有自己的逻辑。
在开发这些 API 时我应该使用共享代码还是每个 API 都必须有自己的代码库?
【问题讨论】:
-
没有“必须”。不过,您可能希望避免复制代码。
-
这是一个措辞非常模糊的问题。人们可能会问有哪些最佳实践。你的团队的技术技能是什么。维护成本,安全等。 Stackoverflow 上有很多关于模块化应用程序的内容。
-
这个问题是高度基于意见的。有些人可能会建议您部署shared-nothing architecture。有些人会建议您将常用功能打包到共享库中。长话短说:由于问题的基于意见的性质,这与 SO 无关。
-
一般来说,你是分开开始的,一旦你有了更清晰的画面,你就重构。重构的一部分是识别新的对象和函数并将它们提取到单独的包中。然后可以在微服务或任何其他项目中使用这些单独的包。这种监督不太可能从一开始就设计好,并且您不想冒险将依赖关系不正确地捆绑在一起,因为这样您就会陷入困境。确保你提取的包/库/函数是可重用的,并且可以单独用于某些目的。
-
我认为这对于 SO 来说显然是题外话,但是从你在这里描述的一点点来看,恕我直言,为这三个功能制作三个单独的微服务是过分的 - 这听起来像一个单一的“报价” ' 提供添加、查看和选择功能的微服务会更合适。仔细考虑拆分成微服务的额外复杂性和开销是否值得感知收益。
标签: java spring microservices