【问题标题】:Is Laravel Facades are WET code? [closed]Laravel Facades 是 WET 代码吗? [关闭]
【发布时间】:2018-11-25 09:00:19
【问题描述】:

根据文档:

外墙有很多好处。它们提供了一种简洁易记的语法,让您可以使用 Laravel 的功能,而无需记住必须手动注入或配置的长类名。此外,由于它们对 PHP 动态方法的独特使用,它们很容易测试。

而据此link

免责声明:我不一定同意外观是不好的或反模式

问题。外墙是 WET 代码吗?

【问题讨论】:

  • laravel.com/docs/5.6/facades 没有回答您的问题吗?听起来您应该在需要时使用它们。
  • 我不确定外墙与 DRY 或 WET 有什么关系。

标签: php laravel dependency-injection facade


【解决方案1】:

Facade 与湿或干无关。外观只是服务容器顶部的一个额外层。 Facade 只做一件事,那就是它提供一个类的给定名称,它是另一个类的别名,通过它您可以解析主类,并且它允许您轻松地做到这一点,即使使用 static 方法调用样式它不是静态的。我们来看一个例子:

$request = app('request');

$inputs = $request->all();

上面的代码从容器中解析请求类,它可以从容器中解析它,因为在容器中,键 request 已经绑定/映射到将由框架解析的类。解析机制存储在容器内,因此可以解析类。注意,不涉及外观,那么外观是做什么的?

好吧,如果你使用外观做同样的事情,那么你可以使用这样的东西:

$inputs = Request::all();

在这种情况下,将调用该类的外观并解析底层类。主要有两个步骤:

1 .获取别名,在本例中为 request

2 。使用别名解析类,即:app('request')

所以,它为你做的是,实际上门面本身会为你调用app('request'),但它所做的唯一额外的事情是,它首先找到alias 名称,因此它可以使用它来调用它容器中的名称。立面提供了进入班级(或建筑物)的便捷入口。希望我回答了你的问题。有关更多信息,请阅读 documentation 中的外观。

【讨论】:

  • 说的很好!我想我应该采用这种方式Principles are timeless, best practices will always be situational.
  • 你是对的。没有最好的方法来做一件事,这取决于上下文(情况)。寻找适当性。一件事可能适合一种特定的上下文,但同一件事可能在另一种情况下被证明是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 2016-03-01
相关资源
最近更新 更多