我何时使用>>> ''.join(reversed(a_str))
'?yletelpmoc gnisrever ton ti si yhW'
在我的控制器中创建任何类,何时将类注入我的控制器?
例如,假设我有一个new
类(它通过读取域实体内部的注释来构建AnnotationBuilder
对象。)
我可以在控制器内部调用它:
Zend\Form
或者我可以将$form = (new AnnotationBuilder())->createForm(MyForm::class);
的实例传递给我的控制器,然后像这样调用它:
AnnotationBuilder
或者如果我直接将$form = $this->annotationBuilder->createForm(MyForm::class);
传递给方法,我可以使用:
AnnotationBuilder
这有什么指导方针吗?例如,阅读依赖注入我可以冒险猜测我必须说明我的所有依赖项,并且由于$form = $annotationBuilder->createForm(MyForm::class);
是构建表单所需的部分,我可以将它注入到我的构造函数中控制器。或者作为setter方法。
其他课程怎么样?目前在我现有的控制器中,我可以计算大约6个AnnotationBuilder
运算符。我是否盲目地将它们重构为全部传递给控制器?
在控制器内使用new
创建内容是否可以接受?
答案 0 :(得分:0)
这取决于模型层的复杂程度。在AnnotationBuilder
的情况下,我肯定会将其作为依赖项传递,但不一定在控制器中。我不是Zend用户,并且不知道它实际上做了什么,但这听起来像“输出内容”,应该放在View实例中(如果你有那些而不仅仅是哑模板)。
一般来说,我会有代码,其中控制器只与模型层中的各种服务进行交互。而且由于每个运行时这些服务都是单一的,因此最好将它们作为依赖项传递。
但是在每个服务中我会兼顾各种实体(域对象)。而且,虽然每个运行时只有一个Authentication
服务,但在其中可能会管理多个Identity
(或者Account
个)实体。这些“重复实例”我将不作为依赖项传递。相反,我会使用new
运算符或使用某个工厂创建它们(这将是一个依赖项,用于单元测试目的)。
我希望它有所帮助。
答案 1 :(得分:0)
我认为遵循规则并不是一个好主意,因为有人这么说。有理由这样做很重要。
注射东西和实施它之间有什么关系?
我发现它更重要的场景是在单元测试中。你对控制器进行单元测试?如果是,AnnotationBuilder
是你要模仿的东西,因为它会影响性能还是出于其他原因?
除了测试用例之外,具有这种具体依赖性是一个问题,或者你应该注入它的抽象?对于最后一个,一般来说,我没有看到控制器的问题取决于混凝土,因为它只是应用程序的基础设施入口点。