当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《对Spring-DataDDD存储库模式感到困惑》经验,为你挑选了2个好方法。

我对DDD存储库模式了解不多,但Spring中的实现让我很困惑.

public interface PersonRepository extends JpaRepository { … }

当接口扩展JpaRepository(或MongoDBRepository ...)时,如果从一个db更改为另一个db,则还必须更改接口.

对我来说,接口是为了提供一些抽象,但在这里并不是那么抽象......

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



1> Ralph..:

你是对的,从外部的角度来看,接口是关于所有实现类的工作的抽象.

这就是这里发生的事情:

JpaRepository是所有JPA存储库的通用视图(适用于所有不同的实体),而MongoDBRepository对于所有MongoDB实体都是相同的.

但JpaRepository和MongoDBRepository没有任何共同之处,除了常见的超级接口中定义的内容:

org.springframework.data.repository.PagingAndSortingRepository

org.springframework.data.repository.Repository

所以对我来说这看起来很正常.

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


实际上,如果您在接口中知道Repository实现具有给定类型,为什么要使用接口呢?但我觉得你很难做得更好......

2> ponzao..:

在这篇博客文章http://blog.springsource.com/2011/02/10/getting-started-with-spring-data-jpa/中可以清楚地说明这背后的原因.

定义此接口有两个目的:首先,通过扩展JpaRepository,我们在我们的类型中获得了一堆通用的CRUD方法,允许保存帐户,删除它们等等.其次,这将允许Spring Data JPA存储库基础结构扫描此接口的类路径并为其创建Spring bean.

如果你不信任来源如此接近来源(双关语),那么阅读这篇文章可能是个好主意http://www.brucephillips.name/blog/index.cfm/2011/3/25/Using -Spring-Data-JPA-To-Reduced-Data-Access-Coding.

我不需要编码的是PersonRepository接口的实现.Spring将创建此接口的实现,并使PersonRepository bean可以自动连接到我的Service类中.PersonRepository bean将具有所有标准CRUD方法(将是事务性的)并返回Person对象或Person对象的集合.因此,通过使用Spring Data JPA,我节省了编写自己的实现类.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有