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

How can I design two different projects with a single entity or a single repository?

我们正在与两个不同的团队开发两个项目。不过,两个项目也有一些共同点,例如,有共同的实体和存储库使用案例。如何在没有代码多路复用的情况下在两个项目中使用单个 entity/repository 进行管理?

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

谢谢...

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

如果您真的需要使用相同的数据库而不需要来自 2 个服务的“代码重复”,并且您使用相同的技术堆栈,则可以使用 repository/entities等系统常用部分。只需将此库视为任何其他第 3 方库,这种思维方式帮助我们构建了微服务。

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

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

为您的项目选择最经济、对开发人员友好或最适合 short/long-term 的项目。