Php 何时使用Facades以及何时注入依赖项

Php 何时使用Facades以及何时注入依赖项,php,dependency-injection,dependencies,laravel-4,facade,Php,Dependency Injection,Dependencies,Laravel 4,Facade,我目前正在使用Laravel-4在php中构建一个web应用程序,但是,我怀疑这个问题也适用于其他语言和框架 我已经阅读了关于依赖注入和Facades的内容,并且理解每种情况下的必要编码。我不清楚的是什么时候你应该使用一个而不是另一个 在Facade设计模式上使用依赖项注入有哪些优点/缺点或原因 非常感谢正面用于使与类的交互更易于阅读和使用。它使代码看起来像是在使用一堆静态方法与类交互,而实际上是在对现有对象调用方法时,没有实例化它 顾名思义,依赖项注入用于将类的依赖项注入到类中。这是通过构造函

我目前正在使用Laravel-4在php中构建一个web应用程序,但是,我怀疑这个问题也适用于其他语言和框架

我已经阅读了关于依赖注入和Facades的内容,并且理解每种情况下的必要编码。我不清楚的是什么时候你应该使用一个而不是另一个

在Facade设计模式上使用依赖项注入有哪些优点/缺点或原因


非常感谢

正面用于使与类的交互更易于阅读和使用。它使代码看起来像是在使用一堆静态方法与类交互,而实际上是在对现有对象调用方法时,没有实例化它

顾名思义,依赖项注入用于将类的依赖项注入到类中。这是通过构造函数完成的。将类注入到另一个类中,以允许该类使用注入类中的功能。当您开始向类中注入接口时,这将变得非常强大。然后,您可以基于接口创建一个类,并将其注入到类中。这样,如果需要更改注入类的工作方式,可以基于接口创建一个新类并注入它。由于您的代码基于注入接口,它将确保接收到注入的类将继续工作,而无需更改


在Laravel4中,如果您创建一个基于雄辩引擎接口的存储库,这一点最为显著。您可以将该存储库注入控制器,并使用界面上的方法获取所需信息。然后,如果您想要切换到Redis之类的东西,您所要做的就是基于该接口创建一个新类,该接口使用Redis引擎,然后注入该类。控制器永远不需要更改。

您是否将存储库包装在一个外观中?就个人而言,不需要。我想您可以,但它违背了依赖注入的目的。依赖注入使代码更具可扩展性,但也使其更易于测试。测试控制器所要做的就是将接口的模拟注入控制器,然后像正常情况一样运行断言。