我的问题更多的是怀疑什么是最佳解决方案。注入提供者服务或容器。良好的做法
想象一下,我们需要实现一个处理程序,这取决于来自实体的一个参数。 让我解释一下
OPTION1
- 服务/供应商/ HSBCProvider
- 服务/供应商/ BarclaysProvider
- 服务/ BankHandler
- 控制器/ BankController
BankHandler
class BankHandler {
private $container;
function __contructor($container) {
$this->container = $container;
}
function create($account) {
$provider = $this->container->get('service.provider.'.$account->getName());
$provider->do();
}
}
BankController行动
public function createAction($id) {
$account = $repository->getAccount($id);
$bankHandler = $this->get('service.bank_handler');
$bankHandler->create($account);
}
OPTION 2
- 服务/提供者/ HSBCProvider
- 服务/提供者/ BarclaysProvider
- 控制器/ BankController
BankController行动
public function createAction($id) {
$account = $repository->getAccount($id);
$bankProvider = $this->get('service.provider.'.account->getName());
$bankProvider->do();
}
使用此选项的BankHandler类不是不再需要
我简化所有的逻辑里面的创建和行动。
我不喜欢选项1因为我正在注射容器。 我不喜欢选项2 cos动作控制器有太多的逻辑(胖控制器?)。
还有其他更好的解决方案吗?
在你的第一个选择,你的'BankHandler'类并不一定要依赖于容器。只需添加一个方法来向一个名称注册一个提供者,并在'create()'方法中返回这个提供者(或者也可以在那里应用您需要的任何逻辑)。 – xabbuh
@xabbuh我不想在create方法中实例化提供程序类,因此我必须将其注入基于帐户名称的构造函数中。提供者服务已经正确注册 – Mauro
这个问题-2有多糟? – Mauro