很好的设计项目,在单个项目中使用不同类型的数据库

时间:2016-02-25 07:24:23

标签: oop design-patterns

假设我的项目使用3个不同的数据库MySql,Redis,Cassandra。我想概括我的设计,以便

  1. 它将在运行时根据输入类型返回相应的数据库客户端(类似于工厂设计模式)

  2. 在未来,我可以轻松添加或替换数据库而无需进行太多代码更改

  3. 这样的东西,假设在运行时如果我想读取/更新mysql db我的设计应该返回mysql db connection form连接池,现在我想为Redis做同样的事情,所以基于输入它应该从连接返回Redis连接池。

    任何人都可以建议我设计项目时应遵循的最佳方法吗?

3 个答案:

答案 0 :(得分:0)

对于这类事情没有灵丹妙药,但你在这方面的思考是不错的。您需要做的是将这些数据库与您的代码逻辑隔离开来,这样代码就无法确定存储数据的来源,也不知道数据来自哪个存储。

  1. 工厂模式将帮助您提出在代码执行期间需要使用的抽象的具体实现。我认为你在这里走在正确的轨道上。我还评估你是否有办法通过配置设置它(你真的需要在运行时决定,或者你可以提前推断它。)
  2. 为了轻松切换实现,最常见的技术是Dependency Inversion。简化,它意味着为您的依赖项(在本例中为数据库)抽象一个公共接口,并针对该接口执行所有客户端代码。这样,如果您决定在接口后面交换具体实现,那么您的客户端代码就不需要更改。快乐的时光! 就数据库而言,我可能会将这些接口分成两部分(读/写),因为您可能无法在它们之间建立100%兼容的接口。

答案 1 :(得分:0)

的好候选人
  

在运行时根据输入类型返回相应的数据库客户端,并且可以轻松添加或替换DB而无需进行太多代码更改

Strategy design pattern。它定义了一系列(在您的情况下为DB)算法,封装每个算法,并使它们在运行时可互换。策略允许算法独立于使用它的客户端。

DBStrategy

答案 2 :(得分:0)

DAO容器注入的

IoC (DI)

这样,业务服务(DAO的客户端)不关心数据访问逻辑细节。