Zachowaj zachowanie
Każda refaktoryzacja zachowuje dokładną funkcjonalność podczas poprawiania struktury. Claude rozumie, że refaktoryzacja oznacza zmianę formy, nie funkcji.
Refaktoryzacja to obszar gdzie Claude Code przekształca się z asystenta kodowania w mnożnik jakości kodu. Rozumiejąc wzorce, wykrywając zapachy kodu i stosując systematyczne transformacje, Claude może pomóc ci ewoluować bazy kodu z długu technicznego w zasoby techniczne. Ten przewodnik ujawnia wzorce refaktoryzacji, które przekształcają bałagan starszego kodu w czyste, maintainable systemy.
Claude podchodzi do refaktoryzacji z trzema podstawowymi zasadami:
Zachowaj zachowanie
Każda refaktoryzacja zachowuje dokładną funkcjonalność podczas poprawiania struktury. Claude rozumie, że refaktoryzacja oznacza zmianę formy, nie funkcji.
Postęp przyrostowy
Duże refaktoryzacje są dzielone na małe, weryfikowalne kroki. Każda zmiana jest testowalna i odwracalna, minimalizując ryzyko.
Rozpoznawanie wzorców
Claude doskonale identyfikuje powtarzające się wzorce, niespójności i możliwości abstrakcji w całej bazie kodu.
Faza analizy
"Przeanalizuj moduł uwierzytelniania i zidentyfikujzapachy kodu, dług techniczny i możliwości refaktoryzacji"
Faza planowania
"Utwórz plan refaktoryzacji do modernizacjisystemu uwierzytelniania bez łamania istniejącej funkcjonalności"
Faza weryfikacji
"Napisz kompleksowe testy dla obecnegozachowania uwierzytelniania przed refaktoryzacją"
Faza wykonania
"Wykonaj krok 1 planu refaktoryzacji:wyciągnij logikę walidacji do oddzielnych funkcji"
Faza walidacji
"Uruchom wszystkie testy i zweryfikuj że zachowanie pozostaje niezmienione"
Jedna z najbardziej fundamentalnych refaktoryzacji - dzielenie dużych funkcji na mniejsze, skoncentrowane:
// Przed: Duża funkcja robiąca wiele rzeczy"Ta funkcja processOrder jest zbyt złożona.Wyciągnij walidację, obliczanie cen ipowiadomienia do oddzielnych funkcji"
// Claude będzie:// 1. Identyfikować sekcje logiczne// 2. Wyciągać każdą do nazwanych funkcji// 3. Aktualizować oryginalną aby wywoływała nowe funkcje// 4. Zapewniać że wszystkie zmienne są właściwie przekazywane
# Poproś Claude:"Refaktoryzuj tę funkcję data_pipeline poprzez wyciągnięcie:- Walidacji danych do validate_data()- Logiki transformacji do transform_data()- Operacji bazy danych do save_to_db()Zachowaj główną funkcję jako orkiestratora"
// Złożony komponent React"Ten komponent UserProfile robi za dużo.Wyciągnij:- Wywołania API do custom hooków- Walidację form do funkcji użytkowych- Pod-sekcje do komponentów potomnych"
Przekształć złożone łańcuchy if/else w eleganckie rozwiązania polimorficzne:
Refaktoryzacja wzorca strategii
"Refaktoryzuj ten switch statement przetwarzania płatnościużywając wzorca Strategy. Utwórz oddzielne klasydla CreditCardPayment, PayPalPayment i CryptoPayment"
// Claude będzie:// 1. Definiować interfejs Payment// 2. Tworzyć konkretne implementacje// 3. Zastępować switch wywołaniami polimorficznymi// 4. Konfigurować factory do tworzenia płatności
Gdy klasa lub moduł staje się zbyt duży, podziel odpowiedzialności:
"Klasa UserService urosła do 2000 linii i obsługuje:- Uwierzytelnianie- Zarządzanie profilem- Uprawnienia- Powiadomienia
Refaktoryzuj na oddzielne serwisy zgodnie zzasadą pojedynczej odpowiedzialności"
Grupuj powiązane parametry w obiekty:
"Ta funkcja createOrder przyjmuje 12 parametrów.Pogrupuj je w logiczne obiekty parametrów jakCustomerInfo, ShippingDetails i PaymentInfo"
Callback na Promise
"Konwertuj wszystkie funkcje oparte na callbackw kliencie API aby używały Promises"
Promise na Async/Await
"Refaktoryzuj wszystkie łańcuchy .then() aby używałynowoczesnej składni async/await"
Klasa na funkcyjną
"Konwertuj ten komponent klasowy React nakomponent funkcyjny z hookami"
CommonJS na ES Modules
"Migruj wszystkie instrukcje require() naskładnię importu/eksportu ES6"
Claude doskonale radzi sobie z systematycznymi migracjami frameworków:
"Utwórz plan migracji z React 16 na 18:- Zidentyfikuj zmiany łamiące- Zaktualizuj metody cyklu życia- Konwertuj na nowe wzorce- Zaktualizuj podejście do testowania"
"Migruj ten kontroler AngularJS na nowoczesny Angular:- Konwertuj na TypeScript- Używaj dependency injection- Zaktualizuj na reaktywne formularze- Zaimplementuj właściwe typowanie"
"Refaktoryzuj z callbacków MongoDB na async/await z Mongoose:- Zaktualizuj wszystkie metody modeli- Konwertuj query buildery- Modernizuj obsługę błędów- Dodaj właściwe typy TypeScript"
Identyfikuj wąskie gardła
"Przeanalizuj tę funkcję przetwarzania danych i zidentyfikujwąskie gardła wydajności"
Proponuj optymalizacje
"Zasugeruj strategie refaktoryzacji aby poprawić wydajnośćzidentyfikowanych wąskich gardeł"
Implementuj cache’owanie
"Dodaj memoization do kosztownych obliczeń izaimplementuj właściwe unieważnianie cache"
Optymalizuj algorytmy
"Zastąp zagnieżdżone pętle O(n²) bardziejefektywnym algorytmem"
Rozkładanie monolitycznych aplikacji wymaga starannego planowania:
Wzorzec wyciągania serwisu
"Przeanalizuj naszą monolityczną aplikację e-commerce i utwórzplan wyciągnięcia zarządzania inwentarzem dooddzielnego mikrousługi:
1. Zidentyfikuj cały kod związany z inwentarzem2. Zdefiniuj granice serwisów3. Utwórz kontrakty API4. Zaplanuj separację danych5. Obsłuż transakcje rozproszone6. Utwórz strategię migracji"
"Refaktoryzuj tę bazę kodu aby podążała za clean architecture:- Oddziel logikę biznesową od frameworków- Utwórz jasne granice zależności- Zaimplementuj dependency injection- Przenieś logikę bazy danych do repozytoriów- Wyciągnij przypadki użycia z kontrolerów"
Przekształć silnie sprzężone systemy:
"Refaktoryzuj te bezpośrednie wywołania serwisów aby używały zdarzeń:- Zidentyfikuj punkty sprzężenia- Zdefiniuj schematy zdarzeń- Zaimplementuj publishery zdarzeń- Utwórz handlery zdarzeń- Dodaj event sourcing gdzie odpowiednie"
Egzekwuj spójne wzorce w bazie kodu:
Konwencje nazewnictwa
"Standaryzuj wszystkie nazwy zmiennych i funkcji:- camelCase dla zmiennych- PascalCase dla klas- UPPER_SNAKE dla stałych"
Obsługa błędów
"Standaryzuj obsługę błędów:- Używaj spójnych klas błędów- Zaimplementuj właściwe error boundaries- Dodaj strukturalne logowanie- Ujednolic odpowiedzi błędów"
Styl kodu
"Zastosuj spójne formatowanie:- Napraw problemy wcięć- Standaryzuj kolejność importów- Zastosuj auto-poprawki ESLint- Znormalizuj strukturę plików"
Wzorce API
"Standaryzuj wszystkie endpointy REST:- Spójne wzorce nazewnictwa- Ujednolicone formaty odpowiedzi- Standardowe kody błędów- Wspólne podejście do paginacji"
Testy charakteryzacyjne
"Napisz testy które uchwyca obecne zachowanietego starszego kodu przed refaktoryzacją"
Golden Master Testing
"Utwórz testy migawkowe dla obecnego wynikuaby zapewnić że refaktoryzacja nie zmieni zachowania"
Przyrostowe aktualizacje testów
"Aktualizuj testy przyrostowo podczas refaktoryzacji,zapewniając ciągłe pokrycie"
Property-Based Testing
"Dodaj testy oparte na właściwościach aby zweryfikować niezmiennikisą zachowane podczas refaktoryzacji"
Nie zapomnij refaktoryzować samych testów:
"Refaktoryzuj te pliki testowe:- Wyciągnij wspólną konfigurację do beforeEach- Utwórz factories danych testowych- Usuń współzależności testów- Ulepsz opisy testów- Dodaj brakujące przypadki graniczne"
Lista kontrolna ograniczania ryzyka
✅ Zawsze miej testy przed refaktoryzacją ✅ Używaj kontroli wersji dla łatwego wycofania ✅ Refaktoryzuj w małych, recenzowalnych commitach ✅ Uruchamiaj testy po każdej zmianie ✅ Używaj flag funkcji dla dużych refaktoryzacji ✅ Monitoruj produkcję po wdrożeniu ✅ Dokumentuj decyzje architektoniczne ✅ Komunikuj zmiany zespołowi
"Zaimplementuj wzorzec Strangler Fig aby stopniowozastąpić starszy system uwierzytelniania:1. Utwórz nowy serwis auth obok starego2. Kieruj nowe funkcje do nowego serwisu3. Stopniowo migruj istniejące funkcje4. Usuń stary system gdy kompletny"
"Użyj Branch by Abstraction aby refaktoryzować warstwę bazy danych:1. Utwórz interfejs abstrakcji2. Zaimplementuj dla obecnego systemu3. Utwórz nową implementację4. Przełączaj implementacje przez konfigurację5. Usuń starą implementację"
"Zaimplementuj parallel run dla nowego silnika obliczeń:1. Uruchamiaj oba stare i nowe systemy2. Porównuj wyniki w produkcji3. Loguj wszelkie rozbieżności4. Naprawiaj problemy aż do dopasowania5. Przełącz na nowy system"
Poproś Claude o analizę ulepszeń:
"Porównaj metryki kodu przed i po refaktoryzacji:- Złożoność cyklomatyczna- Linie kodu- Pokrycie testów- Procent duplikacji- Metryki sprzężenia"
"Benchmark zrefaktoryzowanego kodu:- Porównanie czasu wykonania- Użycie pamięci- Liczba zapytań do bazy danych- Czasy odpowiedzi API"
Gdy refaktoryzacja idzie źle:
Natychmiastowe wycofanie
git reset --hard <last-known-good-commit>
Przeanalizuj co poszło źle
"Przejrzyj nieudaną refaktoryzację i zidentyfikuj:- Jakie założenia były nieprawdziwe- Które testy brakowały- Jak zapobiec podobnym problemom"
Utwórz poprawiony plan
"Utwórz nowy plan refaktoryzacji który:- Adresuje znalezione problemy- Używa mniejszych kroków- Dodaje więcej punktów weryfikacji"
Doskonałość refaktoryzacji
Złote zasady refaktoryzacji z Claude:
Refaktoryzacja z Claude Code przekształca tradycyjnie ryzykowny, czasochłonny proces w systematyczną, inspirującą pewność praktykę. Wykorzystując rozpoznawanie wzorców Claude, głębokie zrozumienie języka i niestrudzony wykonanie, możesz rozwiązać dług techniczny który inaczej utrzymywałby się w nieskończoność. Kluczem jest podejście do refaktoryzacji jako zdyscyplinowanej praktyki – planuj ostrożnie, wykonuj przyrostowo i weryfikuj stale. Z tymi wzorcami utrzymasz bazę kodu która jest radością w pracy, a nie ciężarem do znoszenia.