2

假设我们要实现一个 FacebookLike按钮,在后端,这个简单的动作可能会发生很多事情。例如:crawl page, extract page data, store page info,associate with user等...

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

用代码来说明,A 比 B 更易于维护吗?

A:

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 数量的好方法(也可以防止控制器变胖。)

4

1 回答 1

1

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

于 2013-10-19T17:28:21.223 回答