Заголовок конечно странный но хз как более правильно feature envy перевести на русский. То что нашел это завистливые функции, но это не совсем то, а завистливые зависимости, это как-то вообще молочное молоко.
В чем конкретно вопрос вопрос.
В идеале если использовать полноценный Dependency injection через параметры конструктора полностью для всех классов что будут использоваться для полного предотвращения feature envy, то в самом начале например сразу после определения экшена заинстанцировать или все классы что будут или могут использоваться дальше или все их фабрики. Т.е. всю цепочку зависимостей. И тут все красиво, но не нравится только то, когда если дальше есть условные разветвления (а их может быть довольно много на сложной логике), то получается довольно много ненужных объектов которые даже не будут использоваться в 90% случаев. Да и конфиг получается страшноватый, независимо от конкретного DI контейнера.
И что я заметил перелопатив большое количество более менее больших опенсорсных проектов на гитхабе. Больше половины вообще забили на DI и на feature envy, клепают создание классов через обычный new и без каких либо проблем юзают различную статику из других классов (не фабрики), а остальные херачат все через сервис локатор (да это "горячо мной любимые" бессмысленные сервисы, да DI контейнер, но по факту такое же гуано как и без него). И я не встретил не одного реального приложения где было бы реализовано полноценное DI с минимальным feature envy для большинства классов.
Т.е. в идеале хотелось бы чтобы все классы использовали только те зависимости что им передали в конструкторе, но я пока не встретил ни одного проекта который бы смог это реализовать. И поэтому вопрос, а возможно ли это в большом приложении? И стоит ли вообще с этим заморачиваться? Или полноценное DI только для небольших участков кода, а так и сервис локатора хватит?
В чем конкретно вопрос вопрос.
В идеале если использовать полноценный Dependency injection через параметры конструктора полностью для всех классов что будут использоваться для полного предотвращения feature envy, то в самом начале например сразу после определения экшена заинстанцировать или все классы что будут или могут использоваться дальше или все их фабрики. Т.е. всю цепочку зависимостей. И тут все красиво, но не нравится только то, когда если дальше есть условные разветвления (а их может быть довольно много на сложной логике), то получается довольно много ненужных объектов которые даже не будут использоваться в 90% случаев. Да и конфиг получается страшноватый, независимо от конкретного DI контейнера.
И что я заметил перелопатив большое количество более менее больших опенсорсных проектов на гитхабе. Больше половины вообще забили на DI и на feature envy, клепают создание классов через обычный new и без каких либо проблем юзают различную статику из других классов (не фабрики), а остальные херачат все через сервис локатор (да это "горячо мной любимые" бессмысленные сервисы, да DI контейнер, но по факту такое же гуано как и без него). И я не встретил не одного реального приложения где было бы реализовано полноценное DI с минимальным feature envy для большинства классов.
Т.е. в идеале хотелось бы чтобы все классы использовали только те зависимости что им передали в конструкторе, но я пока не встретил ни одного проекта который бы смог это реализовать. И поэтому вопрос, а возможно ли это в большом приложении? И стоит ли вообще с этим заморачиваться? Или полноценное DI только для небольших участков кода, а так и сервис локатора хватит?