Kou*_*sha 5 dependency-injection facade inversion-of-control laravel
如果您要将类作为 IoC 的一部分注入控制器,我不明白 Facade 的意义。
假设我有一个名为PostHelper. 我有以下两个功能:
class PostHelper
{
public function __construct() {}
public function all() {}
public function get($id) {}
}
Run Code Online (Sandbox Code Playgroud)
要使用这个助手,无论有没有门面,你都会(在你的控制器中说)
// Without Facade
$helper = new PostHelper();
return $helper->all();
// With Facade
return PostHelper::all();
Run Code Online (Sandbox Code Playgroud)
但是,这是不好的做法,因为我PostHelper在测试时无法模拟它。相反,我会将它传递给我的控制器的构造函数:
class HomeController extends BaseController
{
private $PostHelper;
public function __construct(PostHelper $helper)
{
$this->PostHelper = $helper;
}
public function index()
{
return $this->PostHelper->all();
}
}
Run Code Online (Sandbox Code Playgroud)
在构造函数中,$this->PostHelper = new $helper()如果我没有创建 Facade ,我就可以使用。无论哪种方式,我在使用 DI 时从不使用 Facade 的静态感觉。
那么使用 Facade 有什么意义呢?
引用文档:
Facade 为应用程序的 IoC 容器中可用的类提供“静态”接口。Laravel 附带了许多外观,您可能已经在不知情的情况下使用了它们!Laravel“外观”充当 IoC 容器中底层类的“静态代理”,提供简洁、富有表现力的语法的好处,同时保持比传统静态方法更高的可测试性和灵活性。
它只是使用外部依赖项的另一种方式,无需了解依赖项注入、如何使用 IoC 容器注册和/或获取项目等。它们很方便,特别是对于缺乏经验的开发人员或 Laravel 新手来说。
如果您要注入依赖项(您应该这样做),则不需要外观。
您实际上可以模拟外观,但我仍然会练习正常的依赖注入。
| 归档时间: |
|
| 查看次数: |
1359 次 |
| 最近记录: |