有一种在DAO interface
之前制作DAO implementation
的模式。我对这种模式的优势进行了谷歌搜索,其中一个引人注目的是支持多个数据库。
现在,我能理解的是,这里的多个数据库意味着不同的数据库引擎,而不是多个数据源。显然,多个数据源不应影响如何从DAO接口中实现DAO实现。
我的问题是,在什么情况下我们可能需要支持提供相同数据的多个数据库引擎?另外,如果出现这种需求,将如何管理REST endpoints
以支持不同的数据库?
他们会像/db1/courses/
,/db2/courses
?如果我在这个问题上有任何错误的假设或陈述,请纠正我。
答案 0 :(得分:1)
我遇到了这种情况,我不得不检查两个DB并获取数据。另一个数据库是备份数据库。
这就是流程。
RestController --> Service --> DBService
--> DB1Repository --> Connect to DB1
--> DB2Repository --> Connect to DB2
我们可以根据需要进行设计,最后最重要的是我们遵循SOLID原则。 基本上,高级组件不应依赖于低级组件,而两者都应取决于抽象。
答案 1 :(得分:1)
我只是想添加有关开始Spring开发的答案。这是起初没有任何意义的事情之一。您最终会问自己:
但实际上,这两个都不是您这样做的真正原因。但这是惯例和模式,而这种风格正是人们习惯的习惯,随着时间的推移,您会更喜欢它。还有其他一些原因:
但是实际上这只是Spring的方式,如果您这样做,人们会发现它更容易理解您的代码。
答案 2 :(得分:0)
这里我会弹出来描述一个真实的例子。
我们最近想将一个大型生产数据库(Oracle)更改为另一个数据库(SQL Server)。
对于数据库的不同区域,我们有不同的DAO接口和实现。例如,CustomerDAO,AccountsDAO等。
对于每个接口(例如CustomerDAO),我们都有一个实现(CustomerDAOImplOracle)。
对于我们来说,编写DAO的SQL Server版本(SQL语法和jdbc库当然是不同的)并交换它们而对我们的业务逻辑(使用DAO的服务)进行最小的更改是相对直接的。
因此,在CustomerDAOImplSQLServer上重新实现了CustomerDAOImplOracle。等等...
我们学到的东西: