Dobre praktyki dotyczące obsługi zmian zależności są takie same, jak dobre praktyki w zakresie projektowania aplikacji. Chcesz podzielić architekturę i zminimalizować powszechne powiązanie kodu w zależności od zależności, aby zmiany pozostały odizolowane, tak aby aktualizacja zależności nie przerwała każdej części aplikacji. Koduj interfejsy i zachowaj logikę biznesową od kodu infrastruktury.
W przypadku niewielkich ulepszeń (aktualizowanie wydania punktowego zależności) pomocne jest posiadanie kompleksowego zestawu testów jednostkowych w celu wykrywania awarii spowodowanych zmianami interfejsu API. Jest to jeden ważny powód, dla którego czasami pomaga pisać trywialne testy, które wydają się na powierzchni, aby zawsze działały. Przykładem tego jest napisanie prostego testu jednostki JDBC w celu wykonania prostego zapytania. Wydaje się, że to strata wysiłku, dopóki nie złapiecie problemu ze sterownikiem JDBC po aktualizacji bazy danych (stało się to dla mnie).
W przypadku większych zmian (takich jak uaktualnienie niekompatybilnych wersji frameworka, np. Spring), pomocne są niektóre zautomatyzowane testy funkcjonalne lub integracyjne lub przynajmniej specyfikacja funkcjonalna, którą mogą przeprowadzić użytkownicy kontroli jakości w celu zweryfikowania wysokiego poziomu funkcjonalność. Testy jednostkowe najprawdopodobniej nie będą już istotne, jeśli aktualizowany interfejs API interfejsu jest na tyle inny, aby wymagał szerokich zmian kodu.
Faktyczna część taktyczna zarządzania migracją z jednej wersji zależności do innej niekompatybilnej naprawdę zależy od tego, co robisz. Dojrzała biblioteka zapewni pewną ścieżkę migracji i, miejmy nadzieję, nie będzie wymagać od Ciebie przepisywania wszystkiego. Dobrym pomysłem jest oddzielenie zmian kodu związanych ze zmianą struktury od zmian związanych z implementacją nowej funkcji. W ten sposób, jeśli coś się zepsuje, będziesz wiedział, że ma to związek z aktualizacją ram, a nie z czymś, co złamałeś podczas implementowania nowej funkcji.
Częścią tego, co sprawia, że jest to tak trudne, jest to, że w środowisku wykonawczym możesz mieć tylko jedną wersję konkretnej zależności w maszynie JVM, więc musisz zaktualizować cały kod naraz. OSGi rozwiązuje ten konkretny problem, umożliwiając różnym pakietom OSGi działającym w tym samym systemie zależność od różnych wersji zależności, więc możesz polegać na różnych wersjach zależności w środowisku wykonawczym. W ten sposób Eclipse zarządza zależnościami dla wtyczek bez łamania innych wtyczek.
Rozumiem, co mówisz, ale zastanawiasz się nad tym pytaniem. Całkowicie. Przy założeniu, że znajdujesz się w jednej z tych sytuacji, jakie są najlepsze praktyki (Czy wszyscy po prostu pozwolili Eclipse (i być może m2eclipse) poinformować, gdzie klasy już nie istnieją, stały się przestarzałe, itd ... i przejść od tego?) W kierunku drugiej części mojego pytania, utrzymywanie twoich zależności nieco może pomóc w przyszłym uaktualnieniu z powodów, które wymieniasz łatwiej (lub niepotrzebne, jeśli już przeszedłeś do wersji z funkcją "Securer X 2.0" i złagodziłeś wszelkie zakłócenia). –
Próbuję powiedzieć o najlepszej praktyce: zaktualizuj swoje zależności tylko wtedy, gdy okaże się, że wersje zależności, których używasz, nie są ich przecinaniem. Pozwól swojemu IDE powiedzieć, kiedy coś jest przestarzałe lub już nie istnieje, po to jest. Nie jestem przekonany, że bycie na bieżąco zapobiegnie szeroko zakrojonym zmianom kodu w przyszłości. To zakłada znajomość rozwoju twoich zależności. Wszystko, co możesz zrobić, to testować, testować, testować i minimalizować zależności od twoich zależności. – Joel