在 Laravel 中,我们是否应该使用 Event 来减少控制器依赖性


In Laravel, should we use Event to reduce controller dependency?

假设我们要实现一个 Facebook Like 按钮,在后端,这个简单的操作可能会发生很多事情。例如:crawl pageextract page datastore page infoassociate with user等...

为每个步骤创建模块(库 + 存储库)后,我们需要将它们放在控制器中。为每个模块创建控制器是否比将所有模块注入单个控制器更好?

为了在代码中说明,A 比 B 更易于维护吗?

一个:

controllers/
  like.php
  crawler.php
  extract.php
  ...
//and in like.php
$page = Event::fire('page.crawler', $url);
...
$result = Event::fire('page.extract', $data);
...
//in crawler.php
use Lib/CrawlInterface;
function __construct (CrawlInterface $crawl)
//in extract.php
use Lib/ExtractInterface;
function __construct (ExtractInterface $extract)
...

乙:

controllers/
  like.php
//and in like.php
use Lib/CrawlInterface;
use Lib/ExtractInterface;
use ...
function __construct (CrawlInterface $crawl, ExtractInterface $extract, ...)

显然这不是一个非黑即白的问题,但我想知道Event是否应该以这种方式使用,因为这似乎是减少每个控制器上的 DI 数量的好方法(也可以防止控制器变胖)。

Laravel中的控制器旨在为您的Web应用程序提供具有一些基本功能的端点。 您不应该在两个控制器之间进行通信 - 将代码抽象为控制器可以简单地调用的单独类。 这样,您的控制器将保持分离并专注于其各自的路由要做什么,但仍然可以调用您想要的复杂域级功能,而不会破坏通信。