Scénario:
- Pile: Java, Spring, Hibernate.
- Modèle: application client-serveur.
- Modèle: Model-View-Controller (MVC).
Les classes Service Layer ont trois comportements:
Certains services ont la règle métier dans les méthodes et délèguent la persistance à l'application. Comme:
EntityManager.save (entité);
Certains services appellent simplement une fonction de base de données (en passant des paramètres) comme:
CallableStatement cls = con.prepareCall ("{call databaseFunction (args)}");
Certains services ont des méthodes avec les deux comportements.
Mes questions:
- Y a-t-il un problème à ce que les services d'application appellent - directement - les fonctions de la base de données? N'est-ce pas considéré comme une mauvaise pratique? Quel serait un modèle d'architecture applicable à un projet comme celui-ci?
- Y a-t-il un problème à avoir la combinaison de comportements dans le même service? Telles que les transactions et la cohérence?
- Dans le cas de la maintenance, cette encapsulation fait-elle oublier au développeur qu'il doit également modifier les fonctions de la base de données? Comment éviter cela?
- Ce scénario se produit-il dans d'autres applications à travers le monde ou s'agit-il simplement d'une erreur architecturale?