发布于 2026-01-06 0 阅读
0

Laravel 仓库模式

Laravel 仓库模式

原文发布于:https://asperbrothers.com/blog/implement-repository-pattern-in-laravel/

要在 Laravel 应用程序中实现存储库模式,首先需要了解什么是存储库模式以及使用它的好处。

本文将介绍以下内容:

  • 使用仓储模式的主要好处
  • 如何在 Laravel 中实现仓库模式?
  • 我们将逐步向您展示如何在 Laravel 应用中编写和实现代码。

什么最重要

存储库将域层和持久层分离。存储库提供了一个集合接口,用于访问存储在数据库、文件系统或外部服务中的数据。数据以对象的形式返回。

在 Laravel 应用中使用仓库模式的主要目的是在模型和控制器之间建立桥梁。换句话说,就是将模型与控制器之间的硬性依赖解耦。模型不应该负责与数据库通信或从中提取数据。模型应该是一个代表给定表/文档/对象或数据结构中任何其他类型的对象,并且它应该只负责这一项工作。因此,为了保持 Laravel 代码的简洁性,使用仓库模式来分离模型不应该承担的职责是非常值得的。

使用仓储模式有很多好处,以下列出其中最重要的几点:

  • 数据访问逻辑的集中化使代码更易于维护。
  • 业务逻辑和数据访问逻辑可以分别进行测试。
  • 减少代码重复
  • 降低出现编程错误的概率

在大多数 Laravel 应用中,您可能会遇到这样的代码。

class UsersController extends Controller
{
   public function index()
   {
       $users = User::all();

       return view('users.index', [
           'users' => $users
       ]);
   }
} 

Enter fullscreen mode Exit fullscreen mode

乍一看,似乎还不错。但是,值得思考的是,如果客户提议更改数据结构,不再将数据存储在 MySQL/PostgreSQL 中,而是存储在 Eloquent 不支持的数据引擎中,该怎么办?如果我们这样编写代码,这种更改可能很难实现,甚至根本无法实现!这就是为什么这样编写代码非常危险的原因。所有实现都应该基于接口,这样,一旦发生更改,就不需要修改整个应用程序的代码,而只需要创建一个实现该接口的新类即可。以上代码应该以正确的方式编写。(以上代码应该以正确的方式编写。)

class UsersController extends Controller
{
   private $userRepository;

   public function __construct(UserRepositoryInterface $userRepository)
   {
       $this->userRepository = $userRepository;
   }

   public function index()
   {
       $users = $this->userRepository->all();

       return view('users.index', [
           'users' => $users
       ]);
   }
}
Enter fullscreen mode Exit fullscreen mode

在这个例子中,当客户想要更改数据结构时,将这些更改集成到我们的应用程序中简直易如反掌!我们只需创建一个实现了 UserRepositoryInterface 接口的类,并在其中包含允许我们以新方式提取数据的逻辑,一切就能恢复正常运行。因此,编写代码时,即使面对客户提出的最复杂的更改,我们也能轻松应对,这一点至关重要。存储库模板极大地简化了这一过程!


要查看全文,请访问https://asperbrothers.com/blog/implement-repository-pattern-in-laravel/

文章来源:https://dev.to/asperbrothers/laravel-repository-pattern-how-to-use-why-it-matters-1g9d