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.
62 lines
2.6 KiB
Markdown
Executable File
62 lines
2.6 KiB
Markdown
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 `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<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.
|
||
|
||
## 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: `<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
|
||
|