SpringData如何实现DAO和Repositoty模式?

时间:2015-04-23 16:49:45

标签: spring repository spring-data repository-pattern dao

我对上述两种模式的看法与我在企业应用程序中看到的完全不同。

对于我对它们的理解,您使用DAO进行基本的CRUD操作(例如create(DomainEntity de)retrieve(ID id)update(DomainEntity de)delete(DomainEntity de)和/或delete(ID id))。 DAO类根本没有对存储库的引用。 另一方面,存储库管理其他操作,如findAll()count()findBySomeCriteria(Criteria criteria),...即,它处理聚合根。 This网站包含了使用这两种模式的一个很好的例子。

然而,在许多使用SpringData的项目中,我看到了不同的东西。例如,对于每个实体,您都有:

  • 扩展EntityRepository或其子接口之一的通用接口public interface Repository<T,ID extends Serializable>。它包含带有一些常规名称的方法签名;基于这些名称,SpringData会自动在数据库上执行正确的查询。
  • 具有基本CRUD操作的通用interface EntityDao(与上面相同的操作)
  • 实现EntityDao的类。这是最有争议的一点,因为这个类包含对存储库类的引用。像

    这样的东西
    @Service
    public class EntityDaoImpl extends GenericDaoImpl<Entity> implements EntityDao {
    
      @Autowired
      private EntityRepository repository;
    
      public void delete(ID id) {
      repository.delete(ID id)
      }
    
      // other CRUD operations using repository
    }    
    

通过这种方式,DAO和存储库之间存在高度耦合。

那么,这是SpringData中存储库的正常用法吗? SpringData是否以与其理论方式不同的方式实现了Repository模式?

0 个答案:

没有答案