Есть сервис в Symfony - SomeService (см. ниже)
И есть клиентский код который его использует (см. ниже)
В клиентском коде есть несколько разных вызовов разных методов сервиса SomeService и каждый метода может использовать общие сервисы на всех, а также и свой набор сервисов.
Соответственно проблема в том, что при вызове одного из методов сервиса, будет инициализация ненужных сервисов через конструктор сервиса, которые не используются в этих методах.
Как правильно решать проблему?
Делать общий родитель с общим конструктором и потом в классах потомках дополнять конструктор своими сервисами, используя конструкторы с вызовом внутри parent::__construct()? Решение возможно сомнительное - будет та же повторяемость кода(перечисление сервисов) в параметрах конструкторов потомков.
Или есть более правильное решение?
class SomeService
{
private ServiceFirst $serviceFirst;
private ServiceSecond $serviceSecond;
public function __construct(
ServiceFirst $serviceFirst,
ServiceSecond $serviceSecond,
SomeCommonService $someCommonService
) {
$this->serviceFirst = $serviceFirst;
$this->serviceSecond = $serviceSecond;
$this->someCommonService = $someCommonService;
}
public function methodFirst()
{
$this->someCommonService->doSomethingCommon();
$this->serviceFirst->doSomethingFirst();
return $this->commonMethod();
}
public function methodSecond()
{
$this->someCommonService->doSomethingCommon();
$this->serviceSecond->doSomethingSecond();
return $this->commonMethod();
}
private function commonMethod(): string
{
// some code
return 'some string';
}
}
И есть какой то клиентский код который его использует
// клиентский код1
$someResultString1 = $someService->methodFirst();
//...
// клиентский код2
$someResultString2 = $someService->methodSecond();