搜索服务失败时的设计模式

时间:2017-08-02 15:46:48

标签: java spring design-patterns spring-data hystrix

我有一个UserRepository来搜索数据库(solr,elasticsearch,其他......)我在我的SQL数据库中有这个用户数据(MySQL,PostgreSQL,其他......),我的问题是我把它放在哪个地方?在存储库中?还是其他抽象(服务,控制器)?

我的例子是Java,但我将它应用于java(Spring)和PHP:

public interface UserRepository extends SolrCrudRepository<User, String> {}

1 个答案:

答案 0 :(得分:1)

如果我理解你,你就做对了

Repository Pattern可让您抽象数据来自 。所以你使用案例/控制器/不需要关心的那些

但是存储库不需要知道有关如何检索该数据的详细信息。这是DAO (Data Access Object)的任务。 DAO封装了有关数据存储方式的详细信息

因此,您的存储库可以有几个DAO访问多个数据源并协调它们。 e.g。

  1. 使用fun_run.grouped_df <- function(data, var) { var <- rlang::enquo(var) tidyr::nest(data) %>% dplyr::mutate(data = purrr::map(.x = data, var = !!var, .f = fun_run)) %>% tidyr::unnest() } 检索用户数据
  2. 如果数据源myDAO1中没有用户数据正在提取,则使用myDAO1获取其他数据源
  3. 继续前进,直到存储库找到所需数据(可能实现Chain of responsability)或返回null或抛出异常或执行您定义的任何操作