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

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

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

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

谢谢...

解决方法

在大多数情况下不建议在逻辑上共享 DB,因为两个团队将相互依赖以演化架构,他们不会自治,因此在实践中您可能最终会得到一个分布式单体。如果您使用微服务,您可能会发现有关事件驱动架构的阅读很有用。

如果您确实需要使用相同的数据库,而不会来自 2 个服务的“代码重复”,并且您使用相同的技术堆栈,您可以创建一个共享库,其中包含存储库/实体和其他常见的系统的组成部分。只需将此库视为任何其他 3rd 方库即可,这种心态帮助我们构建微服务架构。

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

另一个想法是在 DB 之上创建一个 API 层(可能是第三个微服务?),并使用来自其他服务的这个 API 来查询/更新数据。通过这种方式,DB 可以更改,API 应该会保持更稳定,但您可能会以这种方式失去事务性。

为您的项目选择最经济、对开发者友好或最适合短期/长期的方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?