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

Posted

技术标签:

【中文标题】具有可互换持久层的应用程序【英文标题】:Application with interchangeable persistance layer 【发布时间】:2021-07-13 04:16:02 【问题描述】:

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

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

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

我想过这样的事情:

Item 是域对象。

public interface ItemsRepository 

    List<Item> getItems();

每个ItemsRepository 实现都有自己的专用持久层对象。对于 SQL,假设是 ItemEntity 类,对于 Mongo ItemDocument 类。并且每个持久化对象都有与领域对象之间的转换。

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

【问题讨论】:

Spring Data 为你做这件事。 "这样的方法可以接受吗?" - 是的。这是interface segregation principle,属于SOLID principles。 更正:是Separation of Concerns principle,不是接口隔离原则。本质上,持久性是一个单独的关注点,因此应该被分离出来(完全包括特定持久层的数据类)。 @BoristheSpider 但要使用Spring Data JPASpring Data MongoDb,您仍然需要拥有这些专用实体/文档。 【参考方案1】:

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

【讨论】:

以上是关于具有可互换持久层的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 版本之间可互换的 Linq dbml

具有可互换属性的可散列结构?

使用可互换的单例简化调试?

是否有可用于我正在构建的应用程序的现有数据层?

带有可互换字母的字符串

可持久化的书橱