1a0a56a626
Replace the stale multi-module java/mss-failsafe skeleton (old user-management prototype) with the active single-module machine-safety inspection app that was living in its own standalone repo at the repo root. - Remove old java/mss-failsafe/ multi-module tree (mss, userdata, userManagement, mssfailsafe.datalayer, mssfailsafeWeblayer) incl. committed build artifacts - Add the active app (PrimeFaces 11 / JSF 2.3 / Hibernate 5.6 / iText / POI) flattened into java/mss-failsafe/ as the only mss-failsafe in git - Working tree captured = master tip 2a142b5 + in-progress uncommitted work (incl. .github/*.instructions.md AI-context files) - Archive the standalone repo's 33-commit history in GIT_HISTORY_ARCHIVE.md since its .git was not migrated This is the source of truth / base for the upcoming upgraded rewrite.
2.6 KiB
Executable File
2.6 KiB
Executable File
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.<domain>für Manager/Logik.controller.<domain>für JSF Backing Beans.model.<domain>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
nullsein (oder negativ Fake-ID nur temporär). Setze beim finalen Speichern negative IDs aufnull. - 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<T>)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.
- 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:
<ClassName>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