在Laracasts教程中,我看到了:
app/controller/TasksController
app/Acme/Services/TaskCreatorService
TasksController
有这种方法:
public function store()
{
// ...
$this->TaskCreator->make(Input::all());
// ...
}
在TaskCreatorService
方法中make
验证并创建任务。
这种方法是什么以及为什么Jeffrey Way会这样做?
为什么不直接在控制器中创建任务?
抱歉我的英文
答案 0 :(得分:2)
实际上关于Dependency injection是:
依赖注入是一种软件设计模式,其中包含一个或多个 依赖项(或服务)被注入或通过引用传递到 依赖对象(或客户端),并成为客户端的一部分 州。该模式分离了客户端依赖项的创建 从它自己的行为,它允许程序设计loosely coupled并遵循dependency inversion和single responsibility principles。
在这种情况下,它是SOLID原则的一部分。在SOLID
中,Dependency inversion principle
表示one should "Depend upon Abstractions. Do not depend upon concretions."
依赖注入的优点:
因为依赖注入不需要对代码行为进行任何更改,所以它可以作为重构应用于遗留代码。结果是更加独立的客户端,使用存根或模拟对象模拟其他未测试的对象,更容易单独进行单元测试。这种易于测试通常是使用依赖注入时注意到的第一个好处。
依赖注入允许客户端删除其需要使用的具体实现的所有知识。这有助于将客户端与设计更改和缺陷的影响隔离开来。它提升了可重用性,可测试性和可维护性。
依赖注入可用于将系统的配置详细信息外部化为配置文件,从而允许在不重新编译的情况下重新配置系统。可以针对需要不同组件实现的不同情况编写单独的配置。这包括但不限于测试。
减少应用程序对象中的样板代码,因为初始化或设置依赖项的所有工作都由提供程序组件处理。
依赖注入允许并发或独立开发。两个开发人员可以独立开发彼此使用的类,而只需要知道类将通过的接口。插件通常由第三方商店开发,甚至从不与创建使用插件的产品的开发人员交谈。的 (参考文献:维基百科)。 强>