具有可互换持久层的应用程序

问题描述

在我看到的 95% 的示例中,人们在他们的域对象中添加了 @Entity@Document 注释。

我想创建一个可以轻松更改持久层的应用程序。 应该可以将设置从 SQL DB 切换到 e.x. MongoDB

我想让我的域对象完全独立于持久层。

我想过这样的事情:

enter image description here

其中 Item 是域对象。

public interface ItemsRepository {

    List<Item> getItems();
}

每个 ItemsRepository 实现都有自己专用的持久层对象。对于 SQL,让我们说 ItemEntity 类,对于 Mongo ItemDocument 类。并且每个持久化对象都有域对象之间的转换。

这样的做法可以接受吗?如果不是,那么解决该问题的最佳行业模式是什么?

解决方法

我认为这是 Dependency Inversion Principle 的一个很好的应用。我这么说并不是为了反驳对这个问题的其他评论,而是要强调从多个角度来看,这种设计似乎是站得住脚的。我often design code bases according to a similar structure。是的,我会说这是完全可以接受的。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...