2015-09-26 30 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