2013-02-26 68 views
10

我很困惑。試圖理解爲什麼Laravel的許多靜態方法不被認爲是不好的做法

我問了幾位開發人員在Reddit上查看我的代碼。它看起來像這樣。

Template::load('register', array('error_message' => Language::translate('username_in_use')); 

所以它加載register.php,用翻譯替換{error_message}。 (對不起,這個用戶名正在使用中,請選擇另一個)

他們說使用過多的靜態調用是一個不好的做法。然而他們建議Laravel框架,它完全擺脫$ this並使用靜態調用。

有人能解釋一下,如果這是不好的做法,Laravel是一個優雅的框架?

+2

沒有做法不好或不好,有時間和地點的一切 – 2013-02-26 03:16:11

+1

好的單元測試這將是一個正確的痛苦。這是他們在這裏被認爲不好的原因之一。但它也是可讀和簡潔的。 – 2013-02-26 03:17:33

回答

28

由於您不能重置狀態,因此靜態無處不在,並且完全破壞了可測試性。此外,任何事情都可能以代碼的其他方面無法預測的方式影響國家,從而導致潛在的無法預測的行爲。

Laravel 4通過使用靜態「外牆」來防止這種情況發生。這些外牆是「IoC分辨率的語法短手」。它們提供了語法糖和防止緊密耦合的代碼。

由外牆解決的類可以改變,並允許注入模擬系統或任何你想要的。

當然,這並沒有真正解決靜態訪問的其他方面。這是你不能只注入不同的功能。但是,對於Laravel應用程序,您通常不會在域中使用外觀。這對web傳輸層來說更爲重要,因爲web傳輸層已經與您的框架緊密結合,這非常有幫助,通過創建某種類似於您的應用程序層的DSL的方式,可以很好地利用這一事實。

我再說一遍,請考慮不要在您的域圖層深處使用外牆。

相關問題