我有一个实现FactoryInterface
的工厂,如:
class SomeFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
// the code to create SomeClass instance
}
}
现在,所有代码都在createService
方法内(多个if
s,一些查询等),这使得该方法很长且难以遵循。我想通过将一些代码段提取到单独的方法来重构代码。问题出在我的情况下,我最终在每个方法中传递了$serviceLocator->getServiceLocator()
的实例,这实际上没问题,但感觉很难看。
我想知道是否有一种优雅的方式来分配SomeFactory
$serviceLocator->getServiceLocator()
的属性,而不仅仅是在每个提取的方法中传递它。
答案 0 :(得分:0)
我认为你并不真正了解工厂的使用情况。
工厂仅用于在另一个对象中注入依赖项,例如Controller
或Service
。
所以,当然,这取决于你想做什么,但我认为你想创建一个Service
来做一些思考。
示例:
class MyService implements ServiceLocatorAwareInterface
{
use ServiceLocatorAwareTrait; // used to inject SL getter and setter in your code
public function myMethod1()
{
$formElementManager = $this->getServiceLocator()->get('formElementManager');
// ... etc ...
}
public function myMethod9999() ......
}
class MyServiceFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
$myService = new MyService();
$myService->setServiceLocator($serviceLocator);
$myService->setAnotherProperty(...);
return $myService;
}
}
如果ServiceLocator
课程中确实需要MyService()
,建议您将其__construct()
方法注入<{p}}