2015-09-26 96 views
9

我知道这是有很多争论的一个问题,但也有关于它的两个方面,我还没有看到太多参考,并想知道答案的:2关于Laravel门面小问题

  1. 我们一直都在使用静态函数 - 我确定没有人会停止使用dd()助手,但显然甚至是纯粹的PHP静态函数,如json_encode()array()。为什么在Facade后面看到laravel类作为类似的辅助函数而不是类依赖关系是没有意义的?

更重要的,我们在狭窄的控制流程使用这些dependencies多次(或条件)的方法和类\方法内是真正不是所有的时间必然取决于那些助手(例如用户类仅用于用户认证等)

  • 在他对这次辩论的反应,泰勒Otwel自己说,使用外墙可能导致responsibility bloat in your classes这意味着我们可能会尝试写班级\方法,做太多,而不是分开他们 - 但我不明白如何使用立面,而不是在承包商或方法注入所有这些类是不同的责任 - fr ü我所理解的只是在声明这些类的地方发生了变化 - 在方法签名中或内部它(我明白这有很多不同之处,但在班级责任问题上没有看到)。有人可以解释这个吗?
  • 底线我在问这个,因为很显然,当他们充当帮手而不是作为辅助工具的核心部分时,我都是为了正面,我想知道我不是唯一的其中一个......我主要担心必须编写我在类中用作依赖关系的每一小段帮助程序。

    谢谢!

    回答

    7

    由于这个讨论中争议裹着,我会让这短暂的,只是直接回答你所提出的两点:

    1. 本机PHP json_encode功能也算是一个帮手,因为它是idempotent。总之,它没有依赖性,并且具有可预测的输出。因此,例如date函数是而不是的辅助函数。出于这个原因,许多人避开它,而是使用DateTime类。

    2. 泰勒意味着责任膨胀是因为你没有先声明你的依赖关系,你不知道你的控制器做了多少。如果你不得不事先声明你的依赖关系(通过注入),那么当你的控制器拥有太多的依赖关系时,你很可能会意识到这一点,并将一些职责抽象到他们自己的类中。

    再一次请注意,我在这里不提供意见;围绕它有太多的争议。我只是澄清你的问题,以便你能形成你自己的知情意见。

    +0

    你能否澄清为什么日期函数不是帮助者?你的意思是因为它取决于时区吗? – jchamberlain

    +0

    @jchamberlain - 1)它取决于时区。 2)它不是[幂等](https://en.wikipedia.org/wiki/Idempotence)。反复调用'date'函数将不会给你相同的结果。 –

    +0

    嘿@JosephSilber,谢谢你的一个很好的答案。你会说视图外观也是幂等的吗?路线外观?甚至Auth门面?和邮件?他们似乎每次都返回相同的结果(给定相同的参数) – amosmos