如何使用单个实体或单个存储库设计两个不同的项目?
Posted
技术标签:
【中文标题】如何使用单个实体或单个存储库设计两个不同的项目?【英文标题】:How can I design two different projects with a single entity or a single repository? 【发布时间】:2021-04-30 07:38:15 【问题描述】:我们正在与两个不同的团队一起开发两个项目。不过这两个项目也有一些共同点,比如有共同的实体和存储库用例。如何在没有代码多路复用的情况下管理两个项目中的单个实体/存储库?
注意: 第一个项目是spring-batch/spring cloud task 第二个项目是微服务项目
谢谢...
【问题讨论】:
【参考方案1】:在大多数情况下不建议在逻辑上共享数据库,因为两个团队将相互依赖来发展架构,它们不会是自治的,所以在实践中你可能最终会得到一个分布式单体。如果您使用微服务,您可能会发现阅读有关事件驱动架构的文章很有用。
如果您真的需要使用相同的数据库而不需要来自 2 个服务的“代码重复”,并且您使用相同的技术堆栈,您可以创建一个包含存储库/实体和其他常见的共享库系统的组成部分。只需将此库视为任何其他 3rd 方库即可,这种心态有助于我们构建微服务。
但是:如果您有多个自治团队,“代码重复”也不错。如果您将 DB 模式视为某种合同,并且只有一个团队拥有它,那么其他团队可以开发自己的 API(存储库、实体)访问此模式,使用他们首选的工具/技术堆栈等......我会甚至不考虑这种代码重复。
另一个想法是在数据库之上创建一个 API 层(可能是第三个微服务?),并使用来自其他服务的这个 API 来查询/更新数据。这样数据库可以更改,API 应该保持更稳定,但这样可能会失去事务性。
为您的项目选择最经济、对开发人员友好或最适合短期/长期的项目。
【讨论】:
感谢您的回答。事实上,你说的话让我印象深刻,这对我来说是有道理的。但是,我们谈论的是在线(由用户屏幕触发)-离线(批处理使用的服务)restfull 服务。有一些批次使用在线服务,考虑到这些批次处理的数据超过 3000 条,如果我们在每个添加或更新过程中使用通用 API,可能会给我们带来性能问题。此外,两个团队将使用相同的数据库。 是的,我列出了一些可能的解决方案,因为只有您可以选择最适合您的项目的解决方案。此外,不要在早期对其进行过度架构,但要保持重构的可能。您可以为每个项目使用共享库/重复代码,然后在需要时将其重构为 API(项目增长等...)。以上是关于如何使用单个实体或单个存储库设计两个不同的项目?的主要内容,如果未能解决你的问题,请参考以下文章