如何使用单个实体或单个存储库设计两个不同的项目?

1 architecture spring-batch spring-boot microservices spring-cloud-task

我们正在与两个不同的团队开发两个项目。然而,这两个项目有一些共同点,例如,有共同的实体和存储库使用案例。如何在不使用代码复用的情况下管理两个项目中的单个实体/存储库?

注意:第一个项目是 spring-batch/spring cloud task 第二个项目是微服务项目

谢谢...

Dav*_*lai 5

从逻辑上讲,在大多数情况下不建议共享数据库,因为两个团队将依赖彼此来发展模式,他们不会是自治的,所以在实践中你可能最终会得到一个分布式的整体。如果您采用微服务,您可能会发现有关事件驱动架构的阅读很有用。

如果您确实需要使用相同的数据库而不需要来自两个服务的“代码重复”,并且您使用相同的技术堆栈,则可以使用存储库/实体和系统的其他公共部分创建一个共享库。只需将此库视为任何其他第三方库即可,这种思维方式帮助我们构建微服务。

但是:如果你有多个自治团队,“代码重复”也不错。如果您将数据库模式视为某种合同,并且只有一个团队拥有它,那么其他团队可以开发自己的 API(存储库、实体)来访问该模式,使用他们喜欢的工具/技术堆栈等......我会甚至不考虑这个代码重复。

另一个想法是在数据库之上创建一个 API 层(也许是第三个微服务?),并使用其他服务中的 API 来查询/更新数据。这样数据库可以改变,API 应该保持更稳定,但这样你可能会失去事务性。

选择对您的项目最经济、最适合开发人员或最适合短期/长期的方案。