Dirk Richter
Software-Entwicklung und Architektur
Die Entity Falle und die Auswirkungen
In vielen Softwareprojekten begegnet man dem Antipattern der sogenannten Entity Falle. Es beschreibt die Situation, in der ein System hauptsächlich auf generischen CRUD-Operationen (Create, Read, Update, Delete) für Entitäten basiert und dabei die eigentliche Geschäftslogik vernachlässigt wird. Dieser Ansatz kann für einfache Anwendungen funktionieren, stößt jedoch schnell an seine Grenzen, sobald fachliche Anforderungen steigen. Die Entity Falle tritt dann auf, wenn das Design einer Anwendung sich ausschließlich um die Datenbankentitäten und deren direkte Manipulation dreht. Statt konkrete Anwendungsfälle (Usecases) und Geschäftsprozesse zu modellieren, werden lediglich universelle Methoden wie Beispiel: Spezifische Regeln und Abläufe, wie z.B. Prüfungen oder Genehmigungen, werden nicht explizit implementiert, sondern oft „irgendwie“ im Frontend oder verteilt im Code umgesetzt. Dadurch geht die eigentliche Fachlichkeit verloren. Die Logik ist nicht zentral nachvollziehbar. Änderungen an Anforderungen führen zu schwer nachvollziehbaren Anpassungen an vielen Stellen im Code. Ohne explizite Methoden für Usecases ist es schwierig, Berechtigungen, Validierungen und Korrektheit sicherzustellen. Wenn sich die Geschäftslogik weiterentwickelt, wird das System schwierig anzupassen, da die Regeln nicht klar abgegrenzt sind. CRUD ist für sehr einfache Anwendungen und reine Datenhaltung ausreichend. Sobald jedoch eine der folgenden Anforderungen auftritt, sollten explizite Usecases und Methoden modelliert werden: Die Entity Falle ist ein typisches Problem in datenbankzentrierten Designs. Sie führt dazu, dass die eigentliche Geschäftslogik und die Anforderungen des Fachbereichs nicht ausreichend abgebildet werden. Die Lösung liegt darin, Usecases und Prozesse explizit im Code umzusetzen, um Wartbarkeit, Sicherheit und Flexibilität zu erhöhen.
Inhaltsverzeichnis
Einleitung
Was ist die Entity Falle?
createEntity, getEntity, updateEntity, oder deleteEntity bereitgestellt. Die eigentliche Logik, warum und wann etwas geändert werden darf, fehlt.
Statt einer dedizierten Methode wie approveInvoice(invoiceId) gibt es nur ein generisches updateInvoice(invoiceId, fields), das keinerlei fachliche Regeln oder Abläufe abbildet.Warum ist das problematisch?
1. Fehlende Geschäftslogik
2. Schlechte Wartbarkeit
3. Sicherheitsrisiken und Inkonsistenzen
4. Geringe Flexibilität
Wann reichen CRUD-Operationen nicht mehr aus?
Best Practices – Ausweg aus der Entity Falle
approveInvoice, shipOrder, registerUser.Fazit