Szenario:
- Stapel: Java, Frühling, Ruhezustand.
- Modell: Client-Server-Anwendung.
- Muster: Model-View-Controller (MVC).
Die Service Layer-Klassen weisen drei Verhaltensweisen auf:
Einige Dienste haben die Geschäftsregel innerhalb der Methoden und delegieren die Persistenz an die Anwendung. Mögen:
EntityManager.save (Entität);
Einige Dienste rufen einfach eine Datenbankfunktion auf (Übergabe von Parametern).
CallableStatement cls = con.prepareCall ("{call databaseFunction (args)}");
Einige Dienste verfügen über Methoden mit beiden Verhaltensweisen.
Meine Fragen:
- Gibt es ein Problem damit, dass Anwendungsdienste Datenbankfunktionen direkt aufrufen? Wird dies nicht als schlechte Praxis angesehen? Was wäre ein Architekturmodell für ein solches Projekt?
- Gibt es ein Problem damit, dass der Verhaltensmix im selben Dienst enthalten ist? Wie Transaktionen und Konsistenz?
- Macht diese Kapselung im Falle einer Wartung dem Entwickler klar, dass er auch die Funktionen in der Datenbank ändern sollte? Wie vermeide ich das?
- Tritt dieses Szenario in anderen Anwendungen auf der ganzen Welt auf oder war es nur ein Architekturfehler?