Einen monolithischen Express-Router in Domain-Routen aufteilen
Devin teilt einen 2.000-zeiligen Express-Router in domänenspezifische Routendateien mit gemeinsam genutzter Middleware auf – und aktualisiert anschließend alle Importe und stellt sicher, dass alle Tests erfolgreich sind.Zeigen Sie Devin den Monolithen
Sie kennen die Datei – ein einzelner Express-Router, der über achtzehn Monate gewachsen ist. Jeder Endpoint für jede Domain lebt in Sag Devin ganz genau, wie die Zielstruktur aussehen soll.
src/routes/index.ts: Benutzerregistrierung neben Payment-Webhooks neben Produktsuche. Inline-Auth-Checks wurden in 40 Handlern per Copy & Paste dupliziert. Niemand will sie anfassen, weil eine Änderung an der Bestelllogik die Benutzer-Endpunkte dreihundert Zeilen weiter oben brechen könnte.So sieht der Anfang der Datei typischerweise aus:src/routes/index.ts (before — 2,000 lines)
Devin mit Konventionen anleiten
Devin liest deine Codebasis, um Muster zu erkennen, aber beim Refactoring sind Knowledge-Einträge am wertvollsten. Füge Einträge für Konventionen hinzu, denen Devin folgen soll:
- Router-Muster — „Jeder Domain-Router verwendet
Router()und wird in der Root-Datei mitapp.use('/domain', domainRouter)eingebunden.“ - Middleware — „Auth-Middleware befindet sich in
src/middleware/und wird immer importiert, niemals inline definiert.“ - Fehlerbehandlung — „Alle Routen-Handler verwenden unseren
asyncHandler-Wrapper aussrc/lib/asyncHandler.ts— niemals ein rohes try/catch.“
src/routes/admin.ts, das bereits sauber getrennt ist“ zu deinem Prompt hinzu.Du kannst auch Advanced Devin verwenden, um Knowledge-Einträge für dich zu erzeugen — beschreibe einfach deine Konventionen, und es erstellt gut strukturierte Einträge, die du überprüfen und speichern kannst.PR von Devin überprüfen
Devin erfasst alle Endpoints, verfolgt den Importgraphen, extrahiert gemeinsam genutzte Logik, erstellt die Domain-Dateien, konfiguriert den Root-Router neu und führt Ihre Testsuite aus. So sieht der Pull Request (PR) typischerweise aus:So sieht der bereinigte Root Router nach der Aufteilung aus:Und eine Domain-Routing-Datei, in der die gemeinsame Middleware korrekt importiert ist:Jeder URL-Pfad bleibt identisch —
src/routes/index.ts (after — 15 lines)
src/routes/orders.ts (after — excerpt)
/orders wird jetzt von ordersRouter verarbeitet, der unter /orders eingebunden ist, sodass bestehende Clients und Tests weiterhin ohne Änderungen funktionieren.(Optional) Den Branch auschecken und lokal testen
Für einen strukturellen Refactor wie diesen lohnt es sich, den Branch zu pullen und die Änderungen lokal zu überprüfen, bevor du mergst. Schau ihn dir in Windsurf oder deiner bevorzugten IDE an, starte die App und rufe ein paar Endpoints auf, um sicherzustellen, dass sich Routing, Middleware und Fehlerbehandlung genauso verhalten wie zuvor.Falls dir etwas nicht richtig erscheint, hinterlasse einen Kommentar zum PR — Devin greift ihn auf und pusht einen Fix.
