Mam dużą bazę kodową z wieloma singletonami „anty-wzorcowymi”, klasami użyteczności z metodami statycznymi i klasami tworzącymi własne zależności za pomocą new
słowa kluczowego. To bardzo utrudnia testowanie kodu.
Chcę stopniowo migrować kod do kontenera wstrzykiwania zależności (w moim przypadku jest to Guice
, ponieważ jest to GWT
projekt). Z mojego zrozumienia zastrzyku uzależnienia, to wszystko albo nic. Wszystkimi klasami zarządza Spring / Guice lub żadnymi. Ponieważ baza kodów jest duża, nie mogę przekształcić kodu w ciągu nocy. Potrzebuję więc sposobu, aby robić to stopniowo.
Problem polega na tym, że kiedy zaczynam od klasy, która wymaga wstrzyknięcia do innych klas, nie mogę użyć prostej @Inject
w tych klasach, ponieważ te klasy nie są jeszcze zarządzane przez kontener. To tworzy długi łańcuch aż do „najlepszych” klas, które nigdzie nie są wstrzykiwane.
Jedyny sposób, jaki widzę, to na razie udostępnienie Injector
globalnego kontekstu / aplikacji za pośrednictwem singletona, aby inne klasy mogły uzyskać z niego zarządzaną fasolę. Jest to jednak sprzeczne z ważną ideą nieujawniania composition root
aplikacji.
Innym podejściem byłoby podejście oddolne: aby rozpocząć od klas „wysokiego poziomu”, należy uwzględnić je w pojemniku wstrzykiwania zależności i powoli przechodzić do klas „mniejszych”. Ale potem muszę długo czekać, ponieważ mogę przetestować te mniejsze klasy, które wciąż zależą od globałów / statyki.
W jaki sposób można osiągnąć taką stopniową migrację?
PS Pytanie Stopniowe podejście do wstrzykiwania zależności jest podobne w tytule, ale nie odpowiada na moje pytanie.