Scenario:
- Stack: Java, Spring, Hibernate.
- Modello: applicazione client-server.
- Pattern: Model-View-Controller (MVC).
Le classi del livello di servizio hanno tre comportamenti:
-
Alcuni servizi hanno la regola aziendale all'interno dei metodi e delegano la persistenza all'applicazione. Come:
EntityManager.save (entità);
-
Alcuni servizi chiamano semplicemente una funzione di database (parametri che passano) Come:
CallableStatement cls = con.prepareCall ("{call databaseFunction (args)}");
-
Alcuni servizi hanno metodi con entrambi comportamenti.
Le mie domande:
- C'è qualche problema nell'avere chiamate di servizi applicativi - direttamente - funzioni del database? Non è considerata una cattiva pratica? Quale sarebbe un modello di architettura applicabile a un progetto come questo?
- C'è qualche problema nell'avere il mix di comportamenti nello stesso servizio? Quali transazioni e consistenza?
- In caso di manutenzione, questo incapsulamento rende oscuro allo sviluppatore che dovrebbe anche cambiare le funzioni nel database? Come evitare questo?
- Questo scenario si verifica in altre applicazioni in tutto il mondo o è stato solo un errore architettonico?