Sono nuovo in un team che lavora su un'applicazione Spring MVC sviluppata e complessa. Il contesto dell'applicazione è ampiamente cablato utilizzando i costruttori annotati da @Autowire. Questo sembra essere il motivo principale del problema che vedo con l'applicazione: non esiste una struttura globale dell'applicazione. Se qualcuno che implementa un bean A ha bisogno di una feature di un altro bean B, aggiunge questo altro bean al costruttore di A, indipendentemente dal pacchetto di B o dalla categroy di B. Se qualsiasi bean A (lascia che sia un semplice helper ) richiede dati di sessione, HttpSession viene iniettato (ovviamente un proxy di sessione). Invece di passare gli oggetti del dominio agli oggetti helper tramite gli argomenti del metodo, l'helper ottiene l'accesso a un servizio per recuperare i dati del dominio da solo. Nel corso del tempo ciò ha portato a un'enorme rete di dipendenze. Ho persino visto implementazioni di comparatori basate sui servizi di Spring. Non è possibile individuare alcun livello o livello o modulo o gerarchia nell'applicazione come (controller / servizi / accesso dati).
Sono convinto che questa non sia una buona architettura, ma i sentimenti istintivi non sono sufficienti per convincere la mia squadra che c'è un problema con questa applicazione. Potrebbe anche rivelarsi che tutto va bene e il mio istinto dovrebbe stare zitto ;-) Ho provato a cercare sul web eventuali anti-pattern di applicazione Spring ma non sono riuscito a trovare fatti di supporto. Quindi le mie domande:
- Questo problema è noto come anti-pattern per le applicazioni Spring che esprime le mie preoccupazioni? Come ho detto, sospetto che la convenienza di @Autowire sia la ragione principale. È troppo facile far dipendere un bean da un altro.
- Conosce un libro / articolo incentrato sulle migliori pratiche per l'architettura dell'applicazione Spring? La maggior parte delle cose su Spring si concentra sui dettagli tecnici, non tanto su come progettare l'architettura sonora.
- Quali problemi otterremo continuando come descritto?