0

我一直在做一个小项目,试图开发一个通用的数据存储选项,它可以让我同时使用关系数据库和文档数据库。出于测试目的,我从 MySQL 和 MongoDB 开始。我所有的逻辑和数据都存储在域对象(由值对象组成)中,因此,我只需要一种优雅的方式将其“映射”到适当的数据存储。

是否有任何设计模式可以帮助我解决这个问题?

4

1 回答 1

0

如果您想采用领域驱动设计 (DDD) 方法,那么您可能正在寻找一个存储库。

首先,您需要定义您的存储库合约(或接口),通常是这样的(根据您使用的任何语言进行调整):

public IMyObjectRepository {
    MyObject get(int id);
    Collection<MyObject> getAll();
    void save(MyObject myObject); 
    void delete(int id);
} 

然后你可以有一个 MySQL 和 MongoDB 的实现。

为了将客户端与实现IMyObjectRepository和创建方式分离,客户端可以通过抽象工厂模式或类似方式请求它。然后,您可以根据属性文件或某种其他类型的环境自省将正确的实现返回给他们。

这样做的DDD方面可能是次要的——你可以在没有DDD的情况下做到这一点。您主要关心的是以某种与实现无关的方式(接口)定义您的持久性合约,并有一种方法可以在不将客户端耦合到实现(抽象工厂)的情况下获取对它的引用。存储库是一种方式——您可以在DAO(或两者的组合)中进行。

这是一个使用DAO抽象工厂的示例,可能会给您一些想法。

于 2013-10-01T02:33:22.110 回答