我的問題更多的是懷疑什麼是最佳解決方案。注入提供者服務或容器。良好的做法
想象一下,我們需要實現一個處理程序,這取決於來自實體的一個參數。 讓我解釋一下
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