我不太了解 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/