搜索服务失败时的设计模式
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,它们可以访问多个数据源并协调它们。例如
- 使用
myDAO1
检索用户数据
- 如果数据源中没有用户数据
myDAO1
正在获取然后使用myDAO2
获取另一个数据源
- 继续直到存储库找到所需的数据(可能实现 Chain of responsability)或 return null 或抛出异常或执行您定义的任何操作
我有一个 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,它们可以访问多个数据源并协调它们。例如
- 使用
myDAO1
检索用户数据 - 如果数据源中没有用户数据
myDAO1
正在获取然后使用myDAO2
获取另一个数据源 - 继续直到存储库找到所需的数据(可能实现 Chain of responsability)或 return null 或抛出异常或执行您定义的任何操作