spring - 对 Spring-Data DDD 存储库模式感到困惑

标签 spring domain-driven-design nosql repository-pattern spring-data

我不太了解 DDD 存储库模式,但 Spring 中的实现让我感到困惑。

public interface PersonRepository extends JpaRepository<Person, Long> { … }

由于接口(interface)扩展了 JpaRepository(或 MongoDBRepository...),如果您从一个 db 更改为另一个,您也必须更改接口(interface)。

对我来说,接口(interface)是用来提供一些抽象的,但在这里它不是那么抽象......

你知道为什么 Spring-Data 会这样工作吗?

最佳答案

你是对的,从外部的角度来看,接口(interface)是对所有实现类都有效的东西的抽象。

这正是这里发生的事情:

  • JpaRepository 是所有 JPA 存储库(针对所有不同实体)的通用 View ,而 MongoDBRepository 对所有 MongoDB 实体都是相同的。
  • 但是 JpaRepository 和 MongoDBRepository 没有任何共同之处,除了在通用 super 接口(interface)中定义的东西:

    • org.springframework.data.repository.PagingAndSortingRepository
    • org.springframework.data.repository.Repository

所以对我来说它看起来很正常。

如果您使用实现您的存储库的类,然后使用 PagingAndSortingRepository 或存储库,如果您希望能够从 JPA 实现切换到基于文档的实现(抱歉,我无法想象这样的用例 - 无论如何)。当然,您的 Repository 实现应该实现正确的接口(interface)(JpaRepository、MongoDBRepository),具体取决于它是什么。

关于spring - 对 Spring-Data DDD 存储库模式感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5975199/

相关文章:

java - Spring核心框架可以用于自定义API吗

java - Spring Aop 依赖关系

spring - 使用 JUnit 测试 Spring 应用程序时出现问题 : NoSuchBeanDefinitionException raised only in tests

domain-driven-design - DDD : What is the scope of the ubiquitous language? 是域还是有界上下文?

java - 重构访问遗留系统中存储库的域逻辑

database - 在多台服务器上部署redis

mysql - 使用 MySQL 与 NoSQL 的单个服务器上的 Key-Value 数据库是否存在高性能差异

java - Oracle Hibernate 时间戳/日期映射问题

c# - 单个模块化组件应该与其他组件一起工作(组件=模块)

mongodb - 您将如何在 MongoDB 中为电子邮件应用程序建模?