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

Design pattern when search service fail

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

我的示例在 Java 中,但我会将其应用于 java (Spring) 和 PHP:

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

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

Repository Pattern 可让您抽象 数据的来源。所以你用cases/controllers/whatever不需要关心那个

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

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

  1. 使用myDAO1检索用户数据
  2. 如果数据源中没有用户数据myDAO1正在获取然后使用myDAO2获取另一个数据源
  3. 继续直到存储库找到所需的数据(可能实现 Chain of responsability)或 return null 或抛出异常或执行您定义的任何操作