Glossar aller Regeln
Die anzuwendenden Software-Prinzipien
- P1 SOLID
- P2 Single Responsibility Principle
- P3 Open/Closed Principle
- P4 Liskov Substitution Principle
- P5 Interface Segregation Principle
- P6 Dependency Inversion Principle
- P7 KISS
- P8 DRY
- P9 SPOT
- P10 YAGNI
- P11 SoC
- P12 LC
- P13 IOSP
- P14 NFR
- P15 FP
- P16 EUHM
- P17 Postel's Law / Robustheitsgebot
- P18 TdA/IE
- P19 IH/E
- P20 PoQ
- P21 CF
- P22 UFT
- P23 FF
- P24 RoE
- P25 Don't trust google
- P26 Behandle Warnungen als Fehler
- P27 Prinzip der konzeptuellen Integrität
- P28 Komposition über Vererbung
- P29 Kenne deine Werkzeuge
- P30 Fehler mit Tests nachstellen
Allgemeine Regeln für alle Sprachen (GL)
- GL1 Zielgruppe
- GL2 Anwendung der Prinzipien der Softwareentwicklung
- GL3 Abstraktionsschichten
- GL4 Anwendung von Design Patterns
- GL5 Architektur planen und umsetzen
- GL6 Ein Befehl, ein Build
- GL7 Dokumentation
- GL8 Einsatz von Linter und Formatter
- GL9 Schreiben von Unit-Tests
- GL10 Selbsterklärender Code und keine Kommentare
- GL11 Einfachheit und nur das Notwendige
- GL12 Ständiges Refactoring
- GL13 Einsatz von modellgetriebener Entwicklung
- GL14 Performance-Optimierungen
- GL15 Einheitliche Fehlerbehandlung
- GL16 Verwenden aussagekräftige Rückgabewerte und -typen
- GL17 Gesetz von Demeter
- GL18 Einheitliche Namensgebung
- GL19 Sicherheit
- GL20 Behebung der Wurzel des Problems
- GL21 Logging
- GL22 Vertikaler Abstand
- GL23 Parameter prüfen
- GL24 Trennung von Verantwortlichkeiten
- GL25 Länge von Methoden/Funktionen
- GL26 Niedrige Kopplung
- GL27 Nebeneffekte vermeiden
Allgemein Regeln für Namen
- GN1 Konventionen durch eingesetzte Sprache
- GN2 Allgemeine Regeln
- GN3 Unspezifische Namen
- GN4 Schreibweise
- GN5 Präfixe und Suffixe
- GN6 Variablen
- GN7 mögliche Nullwerte in Variablen
- GN8 Namen für die Anzahl von Elementen
- GN9 Schleifenvariablen
- GN10 Ganzzahlen
- GN11 Fließkommazahlen
- GN12 Boolean
- GN13 Strings
- GN14 Listen, Sets
- GN15 Maps, Dictionary
- GN16 Tuple
- GN17 Optional
- GN18 Namensräume und Packages
- GN19 Klassen
- GN20 Interfaces
- GN21 Funktionen und Methoden
- GN22 Funktionen- und Methodenparameter
- GN23 Methodenpaare
- GN24 Methoden mit Boolean-Rückgabewerten
- GN25 Getter und Setter
- GN26 Build-Pattern Methoden
- GN27 Factory-Methode
- GN28 Verwechslung von Verben und Adjektive
- GN29 Asynchrone Methoden
- GN30 Unbenutzte Namen in Variablen und Parameter
Regeln für JavaScript
- JS1 Allgemeine Regeln
- JS2 Abstraktionsschichten
- JS3 Trennung von Verantwortlichkeiten
- JS4 Trennung von operationalem und integrativem Code
- JS5 Anwendung von ES6 Features
- JS6 Benennung von Variablen, Funktionen, Klassen und mehr
- JS7 Reihenfolge der Deklarationen
- JS8 Verwendung von
const
undlet
anstelle vonvar
- JS9 Verwendung von
const
für alle Variablen und Kennzeichnung von Nicht-Konstanten - JS10 Einsatz von Linter und Formatter
- JS11 Optionaler Operator ?. / Optional Chaining verwenden
- JS12 Auf null und undefined prüfen
- JS13 Object destructuring / Object Eigenschaften bekommen
- JS14 Verwendung von async und await
- JS15 Begrenzte Zeilenanzahl in Methoden/Funktionen
- JS16 Verwenden aussagekräftige Rückgabewerte und -typen
- JS17 Methoden/Funktionen geben für alle Pfade einen Wert zurück
- JS18 Methoden/Funktionen, die Mengen zurückgeben sollen niemals null oder undefined zurückgeben
- JS19 Verwendung von
Optional
in JavaScript-Funktionen - JS20 Verwendung der npm-Bibliothek optional.js zur Rückgabe von Optional in JavaScript
- JS21 If-Bedingungen ohne Else und mit Return
- JS22 Guard Pattern
- JS23 Positiv formulierte If-Bedingungen und Auslagerung komplexer Bedingungen
- JS24 Exceptions in JavaScript nicht einfach loggen und unverändert wieder werfen
- JS25 Benennung von Methoden mit verschiedenen Präfixen für Synchronität und Ergebnisverhalten
- JS26 JSDoc Kommentare für Methoden, Funktionen, Variablen, Objekte und Typen
- JS27 Variable Parameter in Funktionen oder Methoden vermeiden
- JS28 Boolean-Parameter in Funktionen oder Methoden vermeiden
- JS29 Default Parameter in Funktionen oder Methoden
- JS30 Template Strings
- JS31 Spread-Operator
- JS32 Arrow Funktion statt
function
- JS33 Ternärer Operator
- JS34 Array Prototype Methoden
- JS35 Import/Export
- JS36 Einsatz von Set und Map statt Arrays und Objekten
- JS37 Abschließende Kommas
- JS38 for, forEach, for of, for in
- JS39 Methoden-Verkettung
- JS40 Unbenutzte Variablen und Parameter
- JS41 Verwende spezielle Objekte statt spezielle Werte
- JS42 Lokale Funktionen verwenden
- JS43 setTimeout und setInterval
- JS44 Nebeneffekte vermeiden
Regeln für Vue
Regeln für Java
- J1 Allgemeine Regeln
- J2 Einheitliche Namensgebung
- J3 Abstraktionsschichten
- J4 Trennung von operationalem und integrativem Code
- J5 Anwendung von neuen Java-Sprachfeatures
- J6 Benennung von Variablen, Funktionen, Klassen und mehr
- J7 Reihenfolge der Deklarationen
- J8 Verwendung von
final
für alle Variablen und Methoden/Funktions-Parameter Kennzeichnung von Nicht-Konstanten - J9 Einsatz von Linter und Formatter
- J10 Verwende CompletableFuture für kurze asynchrone Operationen
- J11 Begrenzte Zeilenanzahl in Methoden/Funktionen
- J12 Attribute komplexer Typen sollten nicht mit Getter und Setter veröffentlicht werden
- J13 Auf null prüfen
- J14 Methoden/Funktionen, die Mengen zurückgeben sollen niemals null zurückgeben
- J15 Verwendung von
Optional
in bei Rückgabewerte in Funktionen - J16 If-Bedingungen ohne Else und mit Return
- J17 Guard Pattern
- J18 Positiv formulierte If-Bedingungen und Auslagerung komplexer Bedingungen
- J19 Verwendung von Exceptions
- J20 Eigene Exceptions für Fehlerfälle erstellen
- J21 Exceptions dürfen nur geloggt werden, wenn sie nicht geworfen werden
- J22 Benennung von Methoden mit verschiedenen Präfixen für Synchronität und Ergebnisverhalten
- J23 Einsatz von JavaDoc
- J24 Variable Parameter in Methoden vermeiden
- J25 Boolean-Parameter in Methoden vermeiden
- J26 Lambda-Ausdrücke statt Funktionsdeklarationen
- J27 Ternärer Operator
- J28 Verwendung von Streams
- J29 Namen von Paketen
- J30 Paket-Importe
- J31 Vermeide automatisches Boxing und Unboxing
- J32 for, Array.forEach, Stream.forEach
- J33 Generics einsetzen
- J34 Type Erasure bei Generics
- J35 Methoden-Verkettung
- J36 Unbenutzte Variablen und Parameter
- J37 Verwende spezielle Objekte statt spezielle Werte
- J38 JetBrains Annotations
- J39 Eingabeprüfungen in REST-API mit Annotation
- J40 Verwendung von
com.machinezoo.noexception
in Callbacks wie z.B.forEach
in Java - J41 Kapselung von API-Methoden zur Vereinfachung und besseren Testbarkeit
- J42 String-Formatierung in Java
- J43 Rückgabe von Collections sollen immer unveränderlich sein
- J44 Statische Initialisierer vermeiden
- J45 Verwenden von Schnittstellen
- J46 Verwenden von
record
s statt Klassen - J47 Nebeneffekte vermeiden
Allgemeine Regeln für das Refactoring
Regeln für das Refactoring in JavaScript
Regeln für das Refactoring in Refactoring Vue
Regeln für das Refactoring in Refactoring Java
Allgemeine Regeln für das Review
- GR1 Domänenkenntnisse
- GR2 Regeln
- GR3 Kommunikation
- GR4 Zeitpunkt
- GR5 Dauer
- GR6 Ablehnung von Code-Reviews
- GR7 Persönliche Einstellung
- GR8 Gewissenhaftigkeit
- GR9 Gesamten Code prüfen
- GR10 Code lokal prüfen
- GR11 Linting soll automatisiert sein
- GR12 Fehlerbehandlung
Regeln für das Arbeiten mit Künstlicher Intelligenz
- AI1 Was ist KI nicht?
- AI2 Traue keiner KI
- AI3 Sicherheit in den KI Code-Ergebnissen
- AI4 Code-Generierung
Entwurfsmuster
Verhaltensmuster
- DPB1 Chain of Responsibility
- DPB2 Command
- DPB3 Interpreter
- DPB4 Iterator
- DPB5 Mediator
- DPB6 Memento
- DPB7 Observer
- DPB8 State
- DPB9 Singleton
- DPB10 Template Method / Vorlage
- DPB11 Visitor