Strategie dla baz kodu 1M+ LOC
Poproszono cię o dodanie funkcjonalności do modułu przetwarzania płatności. Baza kodu to 1,8 miliona linii w 12 000 plikach. Otwierasz Cursor, wklejasz wymagania, a AI zmyśliło ścieżkę importu, która nie istnieje, odwołało się do przestarzałego wewnętrznego API i pominęło trzy inne serwisy, które muszą się zmienić jednocześnie. Okna kontekstu mają swoje ograniczenia — a duże bazy kodu przekraczają je o rzędy wielkości.
Co wyniesiesz z tego rozdziału
Dział zatytułowany „Co wyniesiesz z tego rozdziału”- Strategie dzielenia dużych baz kodu na fragmenty przyswajalne dla AI
- Wzorce promptów dające narzędziom AI wystarczający kontekst bez ich przeciążania
- Techniki utrzymywania spójności architektonicznej przy zmianach wieloplikowych
- Przepływy pracy dla bezpiecznych, przyrostowych modyfikacji w systemach krytycznych
- Metody budowania trwałego kontekstu, który przetrwa między sesjami
Problem główny: Okno kontekstu vs. rozmiar bazy kodu
Dział zatytułowany „Problem główny: Okno kontekstu vs. rozmiar bazy kodu”Nawet przy modelach wspierających okna kontekstu 200K+ tokenów, baza kodu z milionem linii nie zmieści się. Rozwiązaniem nie jest większy kontekst — to mądrzejszy dobór kontekstu.
Piramida kontekstu
Dział zatytułowany „Piramida kontekstu”Myśl o kontekście jako o piramidzie z czterema warstwami:
- Warstwa architektoniczna (zawsze obecna): Dokumentacja wysokopoziomowa, mapy zależności, granice modułów
- Warstwa domenowa (specyficzna dla zadania): Podsystem, nad którym pracujesz, jego interfejsy i kontrakty
- Warstwa implementacyjna (specyficzna dla pliku): Faktyczne pliki, które modyfikujesz
- Warstwa referencyjna (na żądanie): Przykłady podobnych wzorców w innych częściach bazy kodu
Indeksowanie bazy kodu w Cursor obsługuje warstwę architektoniczną automatycznie. Wzmocnij je za pomocą:
This is a large-scale payment processing platform.Key modules:- /src/payments/ - Payment processing (Stripe, PayPal, internal ledger)- /src/accounts/ - User account management and KYC- /src/notifications/ - Event-driven notification system- /src/shared/ - Shared types, utilities, and base classes
When modifying any module, always check:1. The module's public API in its index.ts barrel export2. Integration tests in /tests/integration/{module-name}/3. The event contracts in /src/shared/events/Użyj oznaczeń @file i @folder, aby wciągać konkretny kontekst do konwersacji. Dla zmian przekrojowych, odwołaj się do grafu zależności: @src/shared/types/payment.ts przed modyfikacją jakiegokolwiek modułu związanego z płatnościami.
Dostęp Claude Code do systemu plików czyni go naturalnie przystosowanym do dużych baz kodu. Ustrukturyzuj swoją hierarchię CLAUDE.md:
# /CLAUDE.md (root - architecture layer)Monorepo with 1.8M LOC. Key architectural decisions:- Event-driven architecture using RabbitMQ- Each service owns its database schema- Shared types live in /packages/shared-types/- All inter-service communication goes through /packages/event-bus/
# /packages/payments/CLAUDE.md (domain layer)Payment service handles Stripe and PayPal integrations.Never modify PaymentProcessor directly - extend via strategy pattern.All new payment methods must implement IPaymentStrategy interface.Claude Code czyta je automatycznie, budując warstwowy kontekst podczas nawigacji po bazie kodu.
Zadania chmurowe Codex działają w izolowanych środowiskach z pełnym dostępem do repozytorium. Dla dużych baz kodu:
# codex.md or AGENTS.mdLarge monorepo navigation rules:- Always run `find . -name "*.ts" -path "*/payments/*" | head -20` to orient before modifying payment code- Check /docs/architecture/ for system design documents before cross-service changes- Use git log --oneline -20 on target files to understand recent change patterns
When making changes that span multiple packages:1. List all affected packages first2. Check each package's README for modification guidelines3. Run the package's test suite after each changeWorktrees Codex umożliwiają równoległą eksplorację różnych podsystemów bez konfliktów.
Strategie nawigowania po dużych bazach kodu
Dział zatytułowany „Strategie nawigowania po dużych bazach kodu”Strategia 1: Eksploracja od zależności
Dział zatytułowany „Strategia 1: Eksploracja od zależności”Zanim cokolwiek zmodyfikujesz, zmapuj promień rażenia twojej zmiany.
Strategia 2: Podsumowanie architektoniczne
Dział zatytułowany „Strategia 2: Podsumowanie architektoniczne”Twórz żywe dokumenty architektoniczne, do których narzędzia AI mogą się odwoływać.
Użyj trybu Agent w Cursor do generowania i utrzymywania podsumowań architektonicznych:
Scan the /src directory and create a concise architectural summary.For each top-level module, document:- Purpose (one sentence)- Public API surface (exported functions/classes)- Dependencies on other modules- Database tables it ownsSave this to .cursor/architecture.mdOdwołuj się do tego pliku w przyszłych konwersacjach za pomocą @.cursor/architecture.md.
Generuj dokumenty architektoniczne, które stają się częścią hierarchii CLAUDE.md:
claude "Analyze the entire /src directory structure and generatean architecture summary. For each package in /packages/:- What it does (one line)- Its public exports- Which other packages it depends on- Its test coverage statusSave to /docs/architecture-summary.md"Claude Code będzie czytał ten plik automatycznie w przyszłych sesjach.
Zadania chmurowe Codex mogą przeprowadzać głęboką analizę architektoniczną:
Analyze this repository's architecture. Create /docs/architecture-map.md with:- Module dependency graph (text-based)- Data flow diagram for the main user journeys- List of shared interfaces and where they're implemented- Database schema ownership by moduleThis will be used as a reference for future development tasks.Strategia 3: Przyrostowa modyfikacja z weryfikacją
Dział zatytułowany „Strategia 3: Przyrostowa modyfikacja z weryfikacją”Nigdy nie próbuj dużej zmiany w jednym podejściu. Rozbij ją na weryfikowalne kroki.
-
Zidentyfikuj wszystkie pliki, które muszą się zmienić
Poproś AI o wylistowanie każdego dotkniętego pliku przed napisaniem jednej linii kodu. Zweryfikuj tę listę z własnym zrozumieniem.
-
Modyfikuj najpierw współdzielone interfejsy
Zacznij od definicji typów, interfejsów i kontraktów. Te zmiany propagują błędy, które ujawniają ukryte zależności.
-
Aktualizuj implementacje moduł po module
Modyfikuj każdy konsumujący moduł niezależnie. Uruchom testy tego modułu przed przejściem do następnego.
-
Uruchamiaj testy integracyjne po każdym module
Nie czekaj, aż wszystkie moduły zostaną zaktualizowane. Wyłapuj problemy integracyjne wcześnie.
-
Finalna weryfikacja przekrojowa
Uruchom pełny zestaw testów, sprawdź błędy typów w całej bazie kodu i przejrzyj kompletnego diffa przed zatwierdzeniem.
Praca z kodem legacy
Dział zatytułowany „Praca z kodem legacy”Duże bazy kodu nieuchronnie zawierają kod legacy. Narzędzia AI mogą pomóc w nawigacji, ale potrzebujesz konkretnych strategii.
Wzorzec: Podejście Kamienia z Rosetty
Dział zatytułowany „Wzorzec: Podejście Kamienia z Rosetty”Znajdź najnowszy, dobrze napisany moduł, który stosuje aktualne konwencje. Użyj go jako wzorca referencyjnego, którego AI ma się trzymać przy modyfikowaniu kodu legacy.
Kiedy coś się psuje
Dział zatytułowany „Kiedy coś się psuje”“AI ciągle zmyśla ścieżki plików i nazwy importów.” Twoja warstwa kontekstu jest zbyt cienka. Dodaj jawne listy plików do swojego pliku reguł lub poproś AI o wyszukanie poprawnych ścieżek przed generowaniem kodu: “First, find where UserService is actually defined in this codebase, then write the import.”
“Zmiany działają w izolacji, ale łamią integrację.” Pominąłeś krok mapowania zależności. Zawsze mapuj promień rażenia przed rozpoczęciem. Użyj strategii przyrostowej modyfikacji z weryfikacją między każdą fazą.
“AI sugeruje wzorce, które są sprzeczne z naszą architekturą.” Dokumentacja twojej warstwy architektonicznej jest brakująca lub nieaktualna. Zainwestuj czas w utrzymywanie plików CLAUDE.md lub .cursor/rules kodujących decyzje i ograniczenia architektoniczne.
“Okno kontekstu wypełnia się, zanim skończę zadanie.” Rozbij zadanie na podzadania. Każde podzadanie powinno być możliwe do ukończenia w jednej konwersacji. Użyj podsumowań architektonicznych do szybkiego odbudowywania kontekstu w nowych sesjach.