Design patterns Verstile数据存储:通过DDD进行抽象以存储在关系数据库或文档数据库中?

Design patterns Verstile数据存储:通过DDD进行抽象以存储在关系数据库或文档数据库中?,design-patterns,database-design,architecture,Design Patterns,Database Design,Architecture,我一直在做一个小项目,试图开发一个多功能的数据存储选项,它允许我同时使用关系数据库和文档数据库。出于测试目的,我从MySQL和MongoDB开始。我所有的逻辑和数据都存储在域对象(由值对象组成)中,因此,我只需要一种优雅的方式将其“映射”到适当的数据存储 有没有什么设计模式可以在这方面帮助我 如果您想采用域驱动设计(DDD)方法,您可能需要一个存储库 首先,您需要定义存储库契约(或接口),通常是这样的(根据您使用的语言进行调整): 公共IMyObjectRepository{ MyObject

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


有没有什么设计模式可以在这方面帮助我

如果您想采用域驱动设计(DDD)方法,您可能需要一个存储库

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

公共IMyObjectRepository{
MyObject get(int-id);
集合getAll();
无效保存(MyObject MyObject);
无效删除(int-id);
} 
然后就可以实现MySQL和MongoDB了

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

这方面的DDD可能是次要的——您可以在没有DDD的情况下完成这项工作。您主要关心的是以某种与实现无关的方式(接口)定义持久性契约,并有一种方法在不将客户机耦合到实现(抽象工厂)的情况下获取对它的引用。响应是一种方法——您可以使用DAO(或两者的组合)来实现

这可能会给你一些想法

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