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

问题描述:

我有一个UserRepository来搜索数据库(solr,elasticsearch,others ...),并且我的SQL数据库中有这个用户数据(MySQL,PostgreSQL,others ...),我的问题是我把这个放在什么地方?在储存库?或其他抽象(服务,控制器)?搜索服务失败时的设计模式

我的例子是在Java中,但我会将此到Java(春季)和PHP:

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

*您的问题是*什么*请编辑你的答案,让每个人都明白你的意思 – Lino

+0

@Lino我把这个放在什么地方?在储存库?为此创建一个服务? – Renan

如果我理解你,你正在做正确的事情

Repository Pattern让你抽象其中的数据来自。因此,您使用案例/控制器/不需要关心的任何内容

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

因此,您的存储库可以具有多个访问多个数据源并对其进行协调的DAO。例如

  1. 使用myDAO1检索用户数据
  2. 如果在数据源myDAO1被获取,然后使用myDAO2来获取其他数据源
  3. 一直走,直到库找到所需要的数据没有用户数据(也许执行Chain of responsability)或返回null或抛出异常或执行任何您定义的操作
+0

明白...我可以创建一个UserRepository,并且他调用DAO(例如UserSQL和UserSolr)和我的服务,控制器只调用存储库,这是一个工作流? – Renan

+0

我可以用hystrix做这个吗? (如果你知道Netflix的hystrix) – Renan

+0

1.检查任何有关Clean Architecture的博客文章。它应该澄清你的工作流程。 2.我没有使用Hystrix,但我会说你可以在任何情况下做到这一点 – Pelocho