一尘不染

在春季实施CrudRepository。我应该遵循的最佳设计是什么?

java

我有从CrudRepository扩展的User Repository,如下所示

public interface UserRepository extends CrudRepository<User, Long>, DatatablesCriteriasRepository<User>

DatatablesCriteriasRepository 具有需要针对不同存储库分别实现的功能。

因此,我创建了这样的存储库实现类。在impl包装中。

public class UserRepositoryImpl implements DatatablesCriteriasRepository<User>

请注意,这仅用于实现功能DatatablesCriteriasRepository。我不想覆盖CrudRepository该框架中提供的默认功能。

但如果我这样做,它会更适合在代码设计,UserRepositoryImpl真正实现UserRepository顾名思义。

public class UserRepositoryImpl implements UserRepository

但这又将迫使我扩展UserRepository接口中的所有功能。如何通过良好的代码设计解决此问题?

实现时可以使用UserRepositoryImpl这个名称DatatablesCriteriasRepository吗?


阅读 196

收藏
2020-12-03

共1个答案

一尘不染

Spring的存储库定制实现文档提供了@JBNizet向我指出的实现该方法的方法。

从文档中摘录如下。

定制存储库功能的界面

interface UserRepositoryCustom {
  public void someCustomMethod(User user);
}

定制存储库功能的实现

class UserRepositoryImpl implements UserRepositoryCustom {

  public void someCustomMethod(User user) {
    // Your custom implementation
  }
}

对基本存储库界面的更改

interface UserRepository extends CrudRepository<User, Long>, UserRepositoryCustom {

  // Declare query methods here
}
2020-12-03