【问题标题】: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,您仍然需要拥有这些专用实体/文档。

标签: java design-patterns persistence data-access-layer domain-object


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-18
    • 2013-04-07
    • 2016-06-08
    • 1970-01-01
    • 2012-10-15
    • 2020-06-07
    • 2016-09-12
    • 1970-01-01
    相关资源
    最近更新 更多