Size: a a a

2020 August 19

D

Danya in supapro.cxx
Тогда лучше назови это DependencyContainer
источник

ПК

Побитый Кирпич... in supapro.cxx
Danya
Это DI контейнер, названный СервисЛокатором
+
источник

L

Lee Armstrong in supapro.cxx
Danya
Это DI контейнер, названный СервисЛокатором
Всмысле. Класс с названием core::ServiceLocator это именно что сервис локатор. В него регистрируются сервиси и из него эти сервисы можно достать.
источник

L

Lee Armstrong in supapro.cxx
Что это если не сервис локатор.
источник

L

Lee Armstrong in supapro.cxx
м?
источник

D

Danya in supapro.cxx
Да я же сказал - DI контейнер это, а не сервис локатор
источник

D

Danya in supapro.cxx
СервисЛокатор это:
Constructor() {
  m_logger = ServiceLocator::getLogger();
  m_imageProvider = ServiceLocator::getImageProvider();
}
источник

L

Lee Armstrong in supapro.cxx
Сервис локатору обязательно быть синглтоном и обязательно использоваться из-под конструктора?
источник

D

Danya in supapro.cxx
В этом заключается этот антипаттерн, да
источник

D

Danya in supapro.cxx
У тебя - DI контейнер
источник

D

Danya in supapro.cxx
Lee Armstrong
Сервис локатору обязательно быть синглтоном и обязательно использоваться из-под конструктора?
Синглтоном может и не обязательно, но фишка в том, что у тебя скрываются реальные зависимости в теле конструктора
А при DI контейнере все зависимости у тебя в параметрах конструктора
источник

D

Danya in supapro.cxx
Danya
СервисЛокатор это:
Constructor() {
  m_logger = ServiceLocator::getLogger();
  m_imageProvider = ServiceLocator::getImageProvider();
}
То есть если здесь объект СервисЛокатора будет передаваться в качестве параметра конструктору - то ничего не изменится с принципиальной точки зрения
источник

D

Danya in supapro.cxx
Так как СервисЛокатор не будет реальной зависимостью класса
Хотя это явно лучше, чем тот вариант, который я описал
источник

D

Danya in supapro.cxx
Но всё ещё плохо
источник

L

Lee Armstrong in supapro.cxx
Да схерали фишка именно в том, что бы юзнуть из-под конструктора?
Тоесть если я юзаю не из под конструктора, то это DI контейнер, а если в конструкторе, то сервис локатор? Не звучит ли это как бред? Даже само название паттерна говорит о нем, "поисковик сервисов". Что-то я в названии Сервис Локатора не вижу CallMeOnlyFromConstructorServiceLocator.

Антипаттерн он из-за того, что люди привыкли юзать в конструкторе. Так бы паттерном был.
источник

D

Danya in supapro.cxx
Так двухфакторная инициализация - это тоже антипаттерн)
источник

D

Danya in supapro.cxx
Объект должен быть готовым после конструирования
источник

L

Lee Armstrong in supapro.cxx
Сервис локатор должен делать одну вещь. Быть реестром для сервисов. А то, откуда он испольхуется это дело другоею
источник

L

Lee Armstrong in supapro.cxx
Danya
Так двухфакторная инициализация - это тоже антипаттерн)
Ну да, поменяй тему.
источник

D

Danya in supapro.cxx
Так ты херню какую-то говоришь
источник