gpt4 book ai didi

Spring with Neo4j, GraphRepository vs 手工界面

转载 作者:行者123 更新时间:2023-12-04 22:32:20 24 4
gpt4 key购买 nike

我发现有一个名为 GraphRepository 的接口(interface)。我有一个用于实现自制接口(interface)的用户存储库,该接口(interface)可以完成其工作,但我想知道,我不应该实现 GraphRepository 吗?即使实现起来会很长,有些方法没用,我认为这是一个标准,我已经重新编写了很多在这个接口(interface)中定义的方法。

那么我应该编写“YAGNI”代码还是不遵守标准?
你有什么建议?

最佳答案

您不需要实际实现 GraphRepository 而是扩展它。 Spring-Data 的负责人是所有样板 CRUD 代码都得到处理(通过在启动时代理),所以您所要做的就是为扩展 GraphRepository 的特定实体创建一个接口(interface),然后只添加您需要的特定方法。

例如;如果我有一个实体 CustomerNode , 要创建标准 CRUD 方法,我可以创建一个新接口(interface) CustomerNodeRepository extends GraphRepository<CustomerNode,Long> .来自GraphRepository的所有方法(例如 save、findAll、findOne、delete、deleteAll 等)现在可以从 CustomerNodeRepository 访问并由 Spring-Data-Neo4J 实现,无需编写一行实现代码。

该模式现在允许您处理特定的存储库代码(例如 findByNameAndDateOfBirth),而不是简单的 CRUD 内容。

Spring-Data 包对于存储库交互非常有用。它可以减少大量代码(代码行减少了 80% 以上),强烈推荐使用它

编辑:实现自定义执行

如果您想将自己的自定义行为添加到 Repository 方法,则创建合并接口(interface)和自定义实现的概念。例如,假设我想创建一个名为 findCustomerNodeBySomeStrangeCriteria 的方法为此,我实际上想链接到关系数据库以执行该功能。

首先,我们定义一个单独的、独立的接口(interface),它只包含我们的“额外”方法。

public interface CustomCustomerNodeRepository {
List<CustomerNode> findCustomerNodeBySomeStrangeCriteria(Object strangeCriteria);
}

接下来我们更新我们的普通接口(interface),不仅扩展 GraphRepository,还扩展我们的新自定义接口(interface)
public interface CustomerNodeRepository extends GraphRepository<CustomerNode,Long>, CustomCustomerNodeRepository {

}

最后一点,是实际实现我们的 findCustomerNodeBySomeStrangeCriteria方法
public class CustomerNodeRepositoryImpl implements CustomCustomerNodeRepository {

public List<CustomerNode> findCustomerNodeBySomeStrangeCriteria(Object criteria) {
//implementation code
}

}

所以,有几点需要注意;
  • 我们创建一个单独的接口(interface)来定义任何具有自定义实现的自定义方法(与 Spring-Data 兼容的“findBy ...”方法不同)
  • 我们的 CustomerNodeRepository 接口(interface)(我们的“主”接口(interface))扩展了 GraphRepository 和我们的“自定义”接口(interface)
  • 我们在只实现自定义接口(interface)的类中只实现“自定义”方法
  • “自定义”实现类必须(默认)称为我们的“主”接口(interface)Impl由 Spring Data 获取(因此在本例中为 CustomNodeRepositoryImpl )

  • 在幕后,Spring Data 提供了 CustomerNodeRepository 的代理实现。作为自动构建 GraphRepository 的合并和我们的类(class)实现 CustomCustomerNodeRepository .类名称的原因是允许 Spring Data 轻松/成功地拾取它(这可以被覆盖,因此它不会查找 *Impl)

    关于Spring with Neo4j, GraphRepository<?> vs 手工界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17772700/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com