# Coding Guidelines ## Allgemein - Sprache: Deutsch in UI-Messages, Englisch im Code (Klassennamen etc.). - Einrückung: 4 Spaces (NetBeans Standard). Keine Tab-Mischung. - Zeilenlänge: Empfehlung max. 140 Zeichen. - Vermeide überflüssige System.out.println – nutze Logger. ## Packages - `business.` für Manager/Logik. - `controller.` für JSF Backing Beans. - `model.` für Entities/Enums. ## Benennung - Manager endet auf `Manager` (CRUD + Fachlogik). - Controller endet auf `Controller`. - Entities nutzen Substantive singular (`SecurityArea`, `DangerPoint`). - Enums nutzen PascalCase Konstanten (`APPROACH_SPEED`, hier bereits gemischt – beibehalten vorhandene Fälle, Konsistenz bei neuen). ## Fehlerbehandlung - Aktuell: Logging + bool Rückgabe. Bei neuen komplexen Methoden: Ziehe eigene Exceptions in Betracht (`BusinessException`). - Niemals stack trace verlieren – immer loggen. Falls Benutzerfeedback nötig → Message über Controller. ## Persistenz - Vor Persist neuer Entity: ID muss `null` sein (oder negativ Fake-ID nur temporär). Setze beim finalen Speichern negative IDs auf `null`. - Verwende `AbstractManager.refresh(entity)` um Lazy Collections zu initialisieren. ## Transaktionen - Schreibmethoden erhalten `@Transactional`. Beim EJB Stateless reicht oft Container-Transaktion; Annotation verstärkt Klarheit. ## Performance - Sammel-Speicheroperationen bevorzugt `saveAll(Collection)` statt Schleifen mit einzelnen Flushes. - Beim Klonen großer Objektgraphen prüfen: Nur notwendige Collections initialisieren. ## UI / JSF - Vermeide direkte Änderungen an listengebundenen Collections ohne Aktualisierung des Backing Beans (PrimeFaces kann sonst nicht updaten). - Nutze klare Dialog-Helper (closeDialogs) statt roher JavaScript Strings. ## PDF - Konsistenz: Verwende iText7 API für neue Funktionen. Markiere Altcode (iText5) für spätere Entfernung. ## Sicherheit - Keine sensiblen Daten in Logs. - Prüfe vor Löschaktionen, dass referenzielle Integrität gewährleistet (vor Entfernen Beziehungen lösen, wie im `deleteSelected()` umgesetzt). ## Tests (Empfehlung) - JUnit + Arquillian für EJB/Entity Tests. - Test-Namensschema: `Test`. - Mindestens: CRUD, Klonen, Fragebogen hinzufügen/entfernen. ## Kommentar-Stil - Klassenheader: Kurze Beschreibung Funktion/Zweck. - Methoden: JavaDoc nur bei komplexer Logik / öffentlich verwendeten APIs. ## Anti-Pattern vermeiden - "God Controller" – trenne Verantwortlichkeiten (nicht alles in einem Controller ansammeln). - Direkte UI-Logik im Manager vermeiden. --- Aktualisiert: 2025-10-20