2013-02-26 67 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的方式,可以很好地利用这一事实。

我再说一遍,请考虑不要在您的域图层深处使用外墙。

相关问题