Automatyzuj to
Stwórz skrypty do automatyzacji częstych wzorców refaktoryzacji
Odziedziczyłeś 5-letni backend e-commerce napisany w Node.js z Express. Nie ma testów, używa callbacków zamiast promises, miesza logikę biznesową z zapytaniami do bazy danych i rozrósł się do 15 000 linii w ponad 50 plikach. Twoje zadanie: unowocześnić go bez łamania istniejącej funkcjonalności, która obsługuje 10 000 użytkowników dziennie.
Po ukończeniu tej lekcji opanujesz:
Przekształć starszą bazę kodu poprzez:
Otwórz starszy projekt w Cursor i zacznij od trybu Ask:
@src"Przeanalizuj tę bazę kodu i podaj:1. Stos technologiczny i wersje2. Ogólny wzorzec architektury3. Główne punkty wejścia i krytyczne ścieżki4. Ocenę jakości kodu5. Potencjalne ryzyka i dług techniczny"
@package.json @package-lock.json"Przeanalizuj zależności:- Które są przestarzałe i wymagają aktualizacji?- Które są deprecated lub porzucone?- Które mają znane luki bezpieczeństwa?- Jaka jest ścieżka aktualizacji dla krytycznych zależności?"
Przełącz się na tryb Agent:
@src"Stwórz kompleksową dokumentację architektury:- Diagram przeglądu systemu (mermaid)- Relacje komponentów- Diagramy przepływu danych- Mapowanie endpointów API- Dokumentację schematu bazy danychZapisz do docs/architecture/legacy-analysis.md"
@src/routes @src/controllers"Prześledź kompletny przepływ dla:1. Rejestracji i logowania użytkownika2. Wyszukiwania i wyświetlania produktów3. Składania zamówienia4. Przetwarzania płatnościUdokumentuj każdy przepływ z diagramami sekwencji"
@src"Zidentyfikuj i udokumentuj wszystkie reguły biznesowe:- Kalkulacje cen- Logikę rabatów- Zarządzanie zapasami- Reguły uprawnień użytkowników- Walidację płatnościStwórz dokument reguł biznesowych"
@src/models @src/db"Przeanalizuj interakcje z bazą danych:- Wymień wszystkie używane tabele/kolekcje- Zidentyfikuj relacje- Znajdź zapytania N+1- Udokumentuj granice transakcji- Zwróć uwagę na brakujące indeksy"
"Skonfiguruj nowoczesny framework testowy:- Zainstaluj Jest i Supertest- Skonfiguruj dla istniejącego kodu- Dodaj konfigurację bazy danych testowej- Stwórz narzędzia testowe- Dodaj skrypty npm do testowania"
@src/routes/products.js"Wygeneruj testy integracyjne dla endpointów produktów:- Testuj wszystkie operacje CRUD- Uwzględnij przypadki brzegowe- Testuj scenariusze błędów- Waliduj formaty odpowiedzi- Sprawdź autentykację/autoryzację"
@src/services @src/utils"Wygeneruj testy jednostkowe dla logiki biznesowej:- Funkcje kalkulacji cen- Stosowanie rabatów- Sprawdzanie zapasów- Walidację danych- Funkcje pomocniczeDąż do 80% pokrycia krytycznych ścieżek"
@docs/architecture/legacy-analysis.md"Stwórz szczegółowy plan modernizacji:- Kolejność priorytetów refaktoryzacji- Ocenę ryzyka dla każdego modułu- Wymagania zgodności wstecznej- Możliwości poprawy wydajności- Harmonogram z kamieniami milowymi"
@src/controllers/products.js"Zrefaktoryzuj ten kontroler:- Przekonwertuj callbacki na async/await- Dodaj właściwą obsługę błędów- Zachowaj dokładnie to samo zachowanie- Zachowaj kompatybilność APIPokaż porównanie przed/po"
Przykład transformacji:
// Przedfunction getProduct(req, res) { db.query('SELECT * FROM products WHERE id = ?', [req.params.id], function(err, results) { if (err) { res.status(500).send('Error'); return; } if (results.length === 0) { res.status(404).send('Not found'); return; } res.json(results[0]); });}
// Poasync function getProduct(req, res) { try { const [product] = await db.query( 'SELECT * FROM products WHERE id = ?', [req.params.id] );
if (!product) { return res.status(404).json({ error: 'Produkt nie znaleziony' }); }
res.json(product); } catch (error) { logger.error('Błąd pobierania produktu:', error); res.status(500).json({ error: 'Błąd wewnętrzny serwera' }); }}
@src/controllers @src/services"Wyodrębnij logikę biznesową do warstwy serwisów:- Stwórz klasy/moduły serwisów- Przenieś reguły biznesowe z kontrolerów- Dodaj wstrzykiwanie zależności- Popraw testowalność- Zachowaj interfejsy kontrolerów"
"Migruj z surowego SQL do query buildera:- Zainstaluj i skonfiguruj Knex.js- Stwórz migrację z istniejącego schematu- Konwertuj zapytania stopniowo- Dodaj pooling połączeń- Zaimplementuj transakcje właściwie"
@src/models"Zoptymalizuj zapytania do bazy danych:- Napraw problemy zapytań N+1- Dodaj odpowiednie indeksy- Zaimplementuj warstwę cache'owania- Grupuj podobne zapytania- Dodaj logowanie/monitorowanie zapytań"
"Zaimplementuj walidację danych:- Zainstaluj Joi lub Zod- Stwórz schematy dla wszystkich inputów- Dodaj middleware walidacji- Popraw komunikaty błędów- Udokumentuj reguły walidacji"
Zawsze postępuj według tego wzorca:
// 1. Zrozum obecne zachowanie@old-file.js"Wyjaśnij co robi ten kod i wszystkie przypadki brzegowe"
// 2. Dodaj testy dla obecnego zachowania"Wygeneruj testy weryfikujące obecne zachowanie"
// 3. Refaktoryzuj z pewnością"Zrefaktoryzuj ten kod zachowując wszystkie testowane zachowania"
// 4. Sprawdź czy testy nadal przechodzą"Uruchom testy i napraw wszelkie niepowodzenia"
Migruj moduł po module:
// Stwórz nową wersję obok starej@src/controllers/products-old.js"Stwórz zmodernizowaną wersję w products-new.js"
// Dodaj feature flag"Dodaj feature flag do przełączania między starą a nową implementacją"
// Testuj w produkcji// Stopniowo migruj ruch// Usuń starą wersję gdy będzie stabilna
Generuj i utrzymuj dokumentację:
@src/routes"Wygeneruj dokumentację OpenAPI/Swagger z istniejących tras"
@src/models"Wygeneruj dokumentację bazy danych z relacjami"
@src/services"Wygeneruj komentarze JSDoc wyjaśniające logikę biznesową"
Problem: Refaktoryzacja łamie istniejącą funkcjonalność
Rozwiązanie:
Problem: Próba naprawienia wszystkiego naraz
Rozwiązanie:
Problem: Niezrozumienie dlaczego kod został napisany w określony sposób
Rozwiązanie:
Posuń refaktoryzację dalej:
Optymalizacja wydajności
Migracja do mikrousług
Nowoczesna infrastruktura
Śledź te metryki:
Zespoły używające tych technik raportują:
Przed rozpoczęciem jakiejkolwiek refaktoryzacji:
ROI: 10x zwrot w ciągu 6 miesięcy dzięki zmniejszeniu błędów i szybszemu rozwojowi
Opanowałeś transformację starszego kodu. Gotowy na więcej wyzwań?
Automatyzuj to
Stwórz skrypty do automatyzacji częstych wzorców refaktoryzacji
Skaluj to
Zastosuj techniki do większych, bardziej złożonych systemów
Naucz tego
Podziel się swoimi wzorcami refaktoryzacji z zespołem
Kontynuuj do Workflow polowania na błędy →