0

我正在构建一个 Laravel 5.3 应用程序,它从许多潜在来源中提取数据。这是一个具有 3 个来源的后备系统:

  • 数据库
  • 如果没有找到,来源 1
  • 如果没有找到,来源 2

所有 3 个源都非常简单,可以使用以下 2 种方法以相同的方式访问:

  • function get($id)
  • function query($type, $string)

我知道围绕实现这一点的不同方法有各种术语,但在阅读文档后我不确定最干净的方法是什么。每个数据源都应该实现为Repository? 一个ServiceProvider包裹在一个容器里?我发现文档很详尽,但也缺乏整体/高级别的解释,所以任何指针都值得赞赏。

4

1 回答 1

0

存储库模式如下:

使用类集合接口访问域对象,在域和数据映射层之间进行调解。Repository 封装了持久化在数据存储中的一组对象以及对它们执行的操作,从而提供了持久层的更加面向对象的视图。存储库还支持实现域和数据映射层之间的清晰分离和单向依赖的目标。

考虑到这一点,你可以说 Eloquent 本身是存储库模式的一个更大的实现,但它仍然是一个存储库。因为它是一个 ActiveRecord 实现,所以 Repository 和 Storage 机制之间没有任何真正的分离。

具体到您的问题,Laravel 不会真正涵盖存储库模式本身,就像它不涵盖服务类或单例一样:教您这些模式不是 Laravel 的责任,它只是为您提供组织这些模式的方法如果您选择实现它们,则模式更容易。

综上所述,我同意你的观点,每个数据源都实现自己的RepositoryInterface. 从那里,您可以注册您自己的ServiceProvider,该服务提供者反过来实例化一个自定义服务类,其目的是返回适当的存储库。

如果确定适当的存储库在逻辑上很简单,并且仅依赖于负责备用数据源的控制器,那么您可能会使用上下文绑定并完全跳过服务类。

不管怎样,有几种方法可以给这只猫剥皮,但你走在正确的轨道上。

编辑:顺便说一句,如果您想严格按照“书本”行事,您可能希望分离出分别连接到每个数据存储的不同存储类,然后您可以根据需要进行查询。然后,您的存储库(无论其存储来源如何,它都可能包含相同类型的数据集合)可以对返回的结果负责。

否则,如果您想尽可能地坚持使用 Eloquent,您可以查看多个数据连接来容纳您的每个数据集。

于 2017-01-17T00:42:15.873 回答