Scenario:
- Stack: Java, Spring, Hibernate.
- Modello: applicazione client-server.
- Modello: 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. Piace:
EntityManager.save (entità);
Alcuni servizi chiamano semplicemente una funzione di database (passando parametri) Come:
CallableStatement cls = con.prepareCall ("{call databaseFunction (args)}");
Alcuni servizi hanno metodi con entrambi i comportamenti.
Le mie domande:
- C'è qualche problema ad avere i servizi dell'applicazione che chiamano direttamente le funzioni del database? Non è considerata una cattiva pratica? Quale sarebbe un modello di architettura applicabile a un progetto come questo?
- C'è qualche problema ad avere il mix di comportamenti nello stesso servizio? Come transazioni e coerenza?
- In caso di manutenzione, questo incapsulamento rende oscuro allo sviluppatore che dovrebbe anche modificare le funzioni nel database? Come evitarlo?
- Questo scenario si verifica in altre applicazioni in tutto il mondo o è stato solo un errore architettonico?