我正在开发一个小型的Web应用程序,它将拥有一个私有的消息系统。当用户在其接收或书面消息中签名时,将显示在下拉菜单中的工具栏区域中。无新意:-)
当用户在页面中浏览时,工具栏将在大部分时间显示。因此,与其将收件箱实现注入到可能通过routes.php调用的每个控制器中,我正在考虑使用新的刀片函数@inject。
这个看起来像(抽象的)
但我不确定这是否是一个好的设计模式,因为我是相对较新的依赖注入一般。我会很感激的。
发布于 2015-06-20 21:06:23
这里有两件事我错了。
1) Laravel的@Injection指令实际上并不执行任何类型的“依赖注入”,尽管它的名称表明是这样的。它实际上是使用服务定位,这是一种被广泛认为是反模式的模式.
基本上,通过@Inject,视图可以访问容器中的任何内容。它可以得到它想要的任何东西。它没有被告知它应该拥有什么。这就是依赖注入和服务位置之间的主要区别。
2)将服务直接注入视图无疑意味着您正在为您的应用程序增加更多的复杂性,因为可以将更多的服务注入到您的模板中。虽然这可能会使事情变得更快、更简单,但从短期来看,长期而言,它将使事情更难以处理。
3)如果发生在您的视图中,您将如何测试如何获取和控制数据?您可能需要使用功能测试,虽然这并不是一件坏事,但对于这样的事情,它仍然不会像单元测试那样有用。
我建议坚持对DI通常是如何做的,并实际使用DI。
https://stackoverflow.com/questions/30958796
复制相似问题