Temat bazuje na Javie, ale dotyczy w zasadzie dowolnego IoC.
Mam taki kejs:
Standardowy (powiedzmy) projekt z użyciem DI / IoC (Java 8, Spring 4).
Klasa A (1k LOC, serwis) ma 16 dependencji, wrzucanych przez konstruktor.
Chcę dorzucić użycie klasy B typu "utils" (90 LOC, jedna instancja wystarczy), ale takiej która zależy od niektórych dependencji klasy A.
Mogę po prostu dodać 17 dependencję. Ale coś mnie skręca żeby tego nie robić, zwłaszcza że klasa B jest bardzo prosta.
Wrzucam ją w ciele konstruktora przez "new" - też nie za dobrze. Zaraz się ktoś przyczepi że nie może tego zmockować.
Jakie są alternatywy?
Kiedy wg Was klasa jest za prosta na wstrzykiwanie przez @Autowired
i oznaczanie przez @Service
/ @Component
?
Bo na razie widzę, że adnotacje @Service
/ @Component
automatycznie rozprzestrzeniają się na wszystkie klasy jak COVID-19.
Czytałem:
https://softwareengineering.stackexchange.com/questions/231867/which-classes-should-be-autowired-by-spring-when-to-use-dependency-injection
https://stackoverflow.com/questions/49988942/spring-is-using-new-a-bad-practice
ale nic przekonującego nie znalazłem.
Macie jakieś namiary na jakieś "best practice" nie-używania IoC w IoC?
Załóżmy, że w projekcie nadal chcę korzystać z kontenera IoC (Spring).
Link dla ludzi nie obeznanych ze Springiem: https://www.baeldung.com/spring-autowire