Grundlagen der Entwicklung
Code-Konventionen, Tool-Konfigurationen und Best Practices für verschiedene Sprachen beherrschen, professionelle Entwicklungsgewohnheiten aufbauen und die Codequalität sowie die Effizienz der Teamzusammenarbeit verbessern.
Mit Sequential Thinking die Grundlagen der Entwicklung lernen
Entwicklungsgrundwissen umfasst viele Aspekte, wobeiMethoden des strukturierten DenkensKann Ihnen helfen, systematisch Folgendes zu beherrschen:
Code-Konventionen
Ein einheitlicher Code-Standard macht Code lesbarer und leichter wartbar und ist die Grundlage der Teamzusammenarbeit. Da jede Sprache eigene Konventionen hat, stellen wir sie unten nach Sprache geordnet vor.
Namenskonventionen
ESLint-Konfiguration
Empfohlen Airbnb oder TypeScript ESLint Konfiguration.
{
"extends": [
"airbnb-base",
"airbnb-typescript/base",
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "./tsconfig.json"
},
"rules": {
"@typescript-eslint/no-explicit-any": "error",
"@typescript-eslint/explicit-function-return-type": "warn",
"import/prefer-default-export": "off",
"max-len": ["error", { "code": 100 }]
}
}Prettier-Konfiguration
{
"semi": true,
"trailingComma": "es5",
"singleQuote": true,
"printWidth": 100,
"tabWidth": 2,
"useTabs": false,
"arrowParens": "always"
}TypeScript-Strict-Mode
{
"compilerOptions": {
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true
}
}React-Konventionen
- • Funktionskomponenten und Hooks verwenden und Klassenkomponenten vermeiden
- • Props werden mit TypeScript-Interfaces definiert
- • Komponentennamen verwenden PascalCase
- • Verwenden Sie React.memo, um die Leistung zu optimieren (falls erforderlich)
- • Benutzerdefinierte Hooks beginnen mit `use`
Schnellreferenz für andere Sprachen
- • rustfmt (Formatierung)
- • clippy (Codeprüfung)
- • snake_case-Namenskonvention
- • dotnet format
- • EditorConfig
- • PascalCase-Benennung
- • Swift: SwiftLint
- • Kotlin: ktlint
- • Dart: dart format
Versionskontrolle
Git ist das Standardwerkzeug der modernen Entwicklung. Git-Workflows, Branching-Strategien und Code-Review-Abläufe zu beherrschen, ist die Grundlage der Teamzusammenarbeit.
Branch-Strategie
Konvention für Commit-Nachrichten (Conventional Commits)
Git-Hooks-Konfiguration
npm run lint
npm run format:check
npx commitlint --edit $1
💡 Verwenden husky(Node.js) oder pre-commit(Python) Git Hooks verwalten
Code-Review-Prozess
Abhängigkeitsverwaltung
Projektabhängigkeiten angemessen verwalten, um Wartbarkeit und Sicherheit des Projekts zu gewährleisten. Verschiedene Sprachen haben unterschiedliche Methoden zur Verwaltung von Abhängigkeiten.
Semantische Versionierung (SemVer)
Gesperrte Dateiverwaltung
- • package-lock.json(npm)
- • yarn.lock(yarn)
- • pnpm-lock.yaml(pnpm)
- • In die Versionsverwaltung einchecken, um Konsistenz sicherzustellen
- • requirements.txt(pip)
- • poetry.lock(Poetry)
- • Pipfile.lock(Pipenv)
- • Virtuelle Umgebungen verwenden, um Abhängigkeiten zu isolieren
Sicherheitsaudit der Abhängigkeiten
💡 Verwenden Dependabot oder Renovate Abhängigkeiten und Sicherheitspatches automatisch aktualisieren
Strategie zur Aktualisierung von Abhängigkeiten
- • Regelmäßig aktualisieren: Einmal im Monat veraltete Abhängigkeiten prüfen
- • Sicherheit zuerst: Abhängigkeiten mit Sicherheitslücken vorrangig aktualisieren
- • Testgetrieben: nach Aktualisierungen die vollständige Testsuite ausführen
- • Schrittweise Aktualisierung:Jeweils eine Hauptabhängigkeit aktualisieren, um großflächige Änderungen zu vermeiden
- • Dokumentationsaufzeichnung: Wichtige Abhängigkeitsaktualisierungen und Migrationsschritte dokumentieren
Richtlinien zur Fehlerbehandlung
Eine gute Fehlerbehandlung macht Programme robuster und verbessert die Benutzererfahrung. Verschiedene Sprachen haben unterschiedliche Muster der Fehlerbehandlung.
Klassifizierung von Fehlertypen
- • Benutzer-Eingabefehler
- • Verstöße gegen Geschäftsregeln
- • Freundliche Fehlermeldungen zurückgeben
- • Datenbankverbindung fehlgeschlagen
- • Dateisystemfehler
- • Detaillierte Protokolle aufzeichnen
- • API-Aufruf fehlgeschlagen
- • Zeitüberschreitungsfehler
- • Einen Wiederholungsmechanismus implementieren
Fehlerbehandlungsmodi
try {
const result = await riskyOperation();
return result;
} catch (error) {
logger.error('Vorgang fehlgeschlagen', { error });
throw new BusinessError('Benutzerfreundliche Fehlermeldung');
}Best Practices für die Fehlerbehandlung
- • Den Fehlertyp klar benennen: Klare Fehlertypen und Fehlercodes definieren
- • Fehlerprotokolle aufzeichnen: Vollständige Fehlerinformationen und Kontext aufzeichnen
- • Benutzerfreundliche Hinweise: den Nutzern freundliche Fehlermeldungen anzeigen und technische Details verbergen
- • Fehlerbehebung: Bietet Wiederherstellungsmechanismen wie Wiederholungsversuche und Fallbacks
- • Fehlergrenze: Fehlergrenzen (React) oder Middleware (Express) verwenden, um Fehler zentral zu behandeln
Protokollierungsrichtlinien
Gutes Logging ist die Grundlage für Debugging und Monitoring. Strukturierte Logs machen Protokolle leichter analysier- und verarbeitbar.
Protokollstufe
Strukturierte Logs (JSON-Format)
{
"timestamp": "2025-01-27T10:30:00Z",
"level": "ERROR",
"message": "Benutzeranmeldung fehlgeschlagen",
"context": {
"userId": "12345",
"ip": "192.168.1.1",
"userAgent": "Mozilla/5.0..."
},
"error": {
"type": "AuthenticationError",
"message": "Falsches Passwort",
"stack": "..."
},
"requestId": "req-abc123"
}Protokollkontext
- • timestamp: Zeitstempel
- • level: Protokollstufe
- • message: Protokollmeldung
- • requestId: Anfrage-ID (Nachverfolgung)
- • userId: Benutzer-ID
- • operation: Operationstyp
- • duration: Dauer der Aktion
- • metadata: zusätzliche Metadaten
Maskierung sensibler Informationen
- • Passwort: Passwörter niemals protokollieren, verwenden
***Alternative - • Token: Nur die ersten und letzten Zeichen des Tokens aufzeichnen
- • Ausweisnummer:Anonymisierung, nur ein Teil der Ziffern wird angezeigt
- • Bankkartennummer: Nur die letzten 4 Ziffern anzeigen
- • E-Mail: teilweise Anonymisierung kann in Betracht gezogen werden (z. B. u***@example.com)
Leistungsoptimierung
Die Leistungsoptimierung ist ein fortlaufender Prozess. Vom Code- bis zum Architekturniveau gibt es Optimierungspotenzial.
Code-Performance-Optimierung
- • Die geeignete Datenstruktur wählen (HashMap vs. List)
- • Verschachtelte Schleifen vermeiden; Indizes oder eine Map verwenden
- • Zwischenspeicherung verwenden, um wiederholte Berechnungen zu vermeiden
- • Analyse der Zeitkomplexität (O(n) vs. O(n²))
- • Code-Splitting und Lazy Loading
- • Bildoptimierung (WebP, Lazy Loading)
- • Verwenden Sie React.memo, um unnötige erneute Renderings zu vermeiden
- • Virtuelles Scrollen (lange Listen)
Optimierung von Datenbankabfragen
- • Indizes für häufig abgefragte Felder hinzufügen
- • Übermäßige Indizierung vermeiden (beeinträchtigt die Schreibleistung)
- • Verbundindizes verwenden, um Mehrfeldabfragen zu optimieren
- • Abfragepläne regelmäßig analysieren (EXPLAIN)
- • Vermeiden Sie SELECT *, fragen Sie nur die benötigten Felder ab
- • Paginierung verwenden, um das gleichzeitige Laden großer Datenmengen zu vermeiden
- • Verwenden Sie JOIN anstelle mehrerer Abfragen
- • N+1-Abfrageprobleme vermeiden
Cache-Strategie
- • Lokaler Cache (Map, LRU-Cache)
- • Geeignet für Hot Data
- • Auf Speicherbegrenzungen achten
- • Verteiltes Caching
- • Ablaufzeit festlegen
- • Schutz vor Cache-Penetration / Durchschlag / Lawine
- • Beschleunigung statischer Ressourcen
- • Bild-, CSS- und JS-Dateien
- • Edge-Knoten-Caching
Leistungsüberwachung
- • APM-Tools:New Relic, Datadog, Sentry (Leistungsüberwachung)
- • Leistungsanalyse:Chrome DevTools、Python cProfile、Go pprof
- • Metriküberwachung: Antwortzeit, Durchsatz, Fehlerrate, Ressourcennutzung
- • Warnmechanismus: Leistungsschwellenwerte festlegen und bei Überschreitung automatisch warnen
Sicherheits-Best Practices
Sicherheit ist keine Option, sondern Pflicht. Von der Code-Ebene bis zur Bereitstellungsebene muss Sicherheit in jeder Phase berücksichtigt werden.
Eingabevalidierung und Bereinigung
- • Formulareingaben mit Bibliotheken wie Zod und Yup validieren
- • Clientseitige Validierung verbessert die Benutzererfahrung
- • Verlassen Sie sich jedoch niemals nur auf die Frontend-Validierung
- • Alle Eingaben müssen validiert werden
- • Eine Whitelist statt einer Blacklist verwenden
- • Benutzereingaben bereinigen und escapen
Schutz vor gängigen Angriffen
- • Parametrisierte Abfragen (Prepared Statements) verwenden
- • ORM verwenden (Prisma, TypeORM)
- • SQL-Strings niemals zusammenfügen
- • Ausgabe-Escaping (automatisches Escaping von React)
- • Content Security Policy (CSP) verwenden
- • Die Verwendung von dangerouslySetInnerHTML vermeiden
- • CSRF-Token verwenden
- • SameSite-Cookie-Attribut
- • Den Referer-Header validieren
- • Passwörter werden mit bcrypt und Argon2 gehasht
- • Die Übertragung verwendet HTTPS (TLS)
- • Sensible Daten bei der Speicherung verschlüsseln
Schlüsselverwaltung
- • Eine .env-Datei verwenden (nicht in Git einchecken)
- • Verwende .env.example als Vorlage
- • Im Produktionseinsatz einen Schlüsselverwaltungsdienst verwenden
- • AWS Secrets Manager
- • HashiCorp Vault
- • Azure Key Vault
- • Schlüssel regelmäßig rotieren
OWASP Top 10 Schutz
Code-Review
Code-Review ist ein wichtiger Schritt zur Sicherstellung der Codequalität. Etablieren Sie klare Review-Prozesse und Checklisten, um Reviews effizienter zu gestalten.
Prüf-Checkliste
- ☐ Entspricht die Funktion den Anforderungen
- ☐ Sind Randfälle behandelt
- ☐ Ist die Fehlerbehandlung vollständig
- ☐ Sind die Tests ausreichend
- ☐ Gibt es Leistungsprobleme?
- ☐ Sind die Datenbankabfragen optimiert
- ☐ Gibt es ein Speicherleck
- ☐ Ist die Cache-Nutzung angemessen?
- ☐ Ist die Eingabevalidierung vollständig
- ☐ Sind sensible Informationen offengelegt worden
- ☐ Ist die Berechtigungsprüfung korrekt?
- ☐ Gibt es Sicherheitslücken in den Abhängigkeiten?
- ☐ Ist der Code klar und gut lesbar?
- ☐ Ist die Namensgebung angemessen?
- ☐ Sind die Kommentare ausreichend
- ☐ Ob die Projektvorgaben eingehalten werden
Bewährte Review-Praktiken
Kontinuierliche Verbesserung
Codequalität ist keine einmalige Aufgabe, sondern ein Prozess kontinuierlicher Verbesserung. Richten Sie Qualitätsmetriken und Überwachungsmechanismen ein.
Codequalitätsmetriken
- • Codekomplexität messen
- • Ziel: < 10
- • Tools: SonarQube, CodeClimate
- • Der Anteil des durch Tests abgedeckten Codes
- • Ziel: > 80%
- • Tools: Jest, Coverage.py, JaCoCo
- • Code Smells, doppelter Code
- • Regelmäßig refaktorisieren
- • Tool: SonarQube
Automatisierte Prüfungen (CI/CD-Integration)
name: Code Quality
on: [push, pull_request]
jobs:
quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
- name: Install dependencies
run: npm ci
- name: Run linter
run: npm run lint
- name: Run tests
run: npm test
- name: Check coverage
run: npm run test:coverageTechnische-Schulden-Management
- • Schulden identifizieren: Verwenden Sie Tools, um Code Smells und doppelten Code automatisch zu erkennen
- • Priorisierung:Nach Auswirkungsbereich und Behebungsaufwand priorisieren
- • Regelmäßiges Refactoring:In jedem Sprint eine bestimmte Zeit für Refactoring einplanen
- • Schulden erfassen: In einem Issue oder in der technischen Schuldenliste dokumentieren
- • Neue technische Schulden vermeiden: bei Code-Reviews auf technische Schulden achten
Lernergebnisse
Nach Abschluss dieses Kapitels werden Sie:
- 1Die Codekonventionen verschiedener Sprachen (TypeScript, Python, Java, Go usw.) und die Tool-Konfiguration beherrschen
- 2Versionierung mit Git beherrschen und Verzweigungsstrategien sowie Code-Review-Prozesse verstehen
- 3Die Bedeutung der Abhängigkeitsverwaltung verstehen und Sicherheitsprüfungs- und Aktualisierungsstrategien beherrschen
- 4Beherrsche Fehlerbehandlung und Protokollierungsstandards, um die Robustheit des Codes zu verbessern
- 5Leistungsoptimierung und Sicherheits-Best Practices verstehen und hochwertigen Code schreiben
- 6Einen Mechanismus für Code-Reviews und kontinuierliche Verbesserung einführen, um die Codequalität des Teams zu verbessern