Blog
Jak modernizować starszą aplikację Symfony bez przepisywania wszystkiego
Starsze aplikacje Symfony można zwykle usprawniać bez pełnego rewrite’u. Praktyczny plan modernizacji chroni działające procesy i wymienia ryzykowny kod krok po kroku.
Modernizacja powinna najpierw zmniejszać ryzyko
Istniejącą aplikację Symfony często można ulepszać bez przepisywania jej od zera. Wybór zależy od stanu systemu, zależności, potrzeb biznesowych i ograniczeń migracji. Najpierw warto ustalić, jakie zachowanie trzeba zachować i co utrudnia kolejne zmiany, zamiast z góry uznawać jedno podejście za bezpieczniejsze.
Podstawą są powtarzalne środowiska, kopie bazy ze sprawdzoną procedurą odtworzenia, przewidywalne wdrożenia i opisane procesy krytyczne, choćby przyjęcie zamówienia. Podstawowe testy działania, czyli smoke testy, szybko sprawdzają główne ścieżki. Ważne reguły i integracje wymagają dokładniejszych testów; testy charakteryzujące utrwalają dotychczasowe zachowanie, ale nie dowodzą jego poprawności.
Szukaj odpowiedzialności w obecnym kodzie
Punktem wyjścia mogą być kontrolery, repozytoria lub metody zapytań, typy formularzy i walidatory, współdzielone serwisy, komendy konsolowe oraz zadania cykliczne. Nie oznacza to, że mają już jasno wyznaczone granice. Szablony pokazują, co użytkownik widzi i obsługuje, lecz nie są automatycznie publicznymi kontraktami API.
Wybierz ograniczoną zmianę i sprawdź jej skutki
O kolejności prac decydują najważniejsze ryzyka i zależności. Poniższy cykl jest wskazówką, nie sztywnym harmonogramem aktualizacji:
Poznaj procesy → zabezpiecz kluczowe zachowanie
Ustal zakres → wprowadź zmianę → zweryfikuj
Brak akceptacji: popraw i sprawdź ponownie
Akceptacja: przygotuj plan awaryjny, potem wdrażaj
Obserwuj efekty → zdecyduj, czy kontynuowaćKrokiem może być wydzielenie zapytań do bazy, przeniesienie decyzji biznesowych z kontrolera lub wymiana starego serwisu za interfejsem. Samo przeniesienie zapytania do repozytorium nie poprawia wydajności, a interfejs ma sens tylko wtedy, gdy tworzy potrzebną granicę.
PHPStan można wprowadzać stopniowo dla zmienianego kodu i jego istotnych zależności. Wykrywa problemy typów i kontraktów, nie potwierdza pełnej poprawności działania. Testy i analiza statyczna uzupełniają się, ale nie eliminują ryzyka migracji.
Zależności warto aktualizować w możliwych do sprawdzenia, zgodnych grupach, według instrukcji dla danej wersji, docelowo przechodząc na wersje wspierane. Niektóre aktualizacje wymagają skoordynowanych zmian. Weryfikacja i plan awaryjny muszą obejmować także dane: cofnięcie wdrożenia kodu nie musi odwrócić ich migracji.
Kiedy rozważyć wymianę systemu
Przepisanie aplikacji może mieć sens przy zasadniczej zmianie produktu albo wtedy, gdy obecna technologia nie spełnia wymagań bezpieczeństwa lub utrzymania przy akceptowalnym koszcie. Porównanie ze stopniową modernizacją powinno uwzględniać dane historyczne, integracje, czasowe współistnienie rozwiązań, sprawdzenie wymaganego zachowania i sposób przełączenia. Żaden pojedynczy czynnik nie przesądza decyzji.
Istniejące reguły trzeba poznać, nie zachowywać automatycznie. Jedne zawierają potrzebną wiedzę biznesową, inne powinny się zmienić na podstawie jawnej decyzji.
Podejście GiSoft
W GiSoft skupiamy się na zmianach, które usuwają konkretne przeszkody w rozwoju. Ustalamy wymagane zachowanie, dodajemy testy tam, gdzie ograniczają ryzyko, obserwujemy skutki wdrożeń i utrzymujemy możliwy do opanowania zakres prac. Celem jest aplikacja łatwiejsza do zmieniania, nie tylko inaczej uporządkowana.
