Architettura a Tre Livelli
Questo viene fatto per separare la logica specifica in diverse classi/package, invece di scrivere tutto in una singola classe.
L'ordine in cui una richiesta viene elaborata è Controller → Service → Repository. Successivamente, la risposta viene restituita in ordine inverso: Repository -> Service -> Controller. Inizieremo l'implementazione con il layer Repository.
Livello Repository
Questo è il livello più basso, dove riceviamo dati elaborati dal layer Service e li salviamo nel nostro database.
Queste classi sono contrassegnate con l'annotazione @Repository per essere aggiunte al contesto Spring.
Main.java
1234@Repository public class RepositoryLevel { // connect DB }
Esempio di utilizzo del Repository
Livello di Servizio
Qui avviene la logica principale dell'applicazione. Nei servizi, si gestiscono o modificano i dati prima di passarli al repository layer.
Per i servizi, si utilizza l'annotazione @Service, che dichiara la classe come un service contenente la logica di business.
Main.java
1234567@Service public class ServiceLevel { public void logic() { //TODO: write business logic } }
Esempio di utilizzo del Service
Livello Controller
Questo livello gestisce l'interazione iniziale tra il client e il server. Tutte le richieste inviate dal client arrivano qui, ed è responsabile della ricezione dei dati forniti dal client.
Elabora le richieste HTTP in ingresso e restituisce le risposte HTTP. I controller fungono da "ponte" tra il client e la logica di business.
A questo livello, sono utilizzate due annotazioni per designare una classe come controller:
-
@RestController: Dichiara una classe come REST controller, che gestisce le richieste HTTP e restituisce dati in formato JSON; -
@Controller: Dichiara una classe come MVC controller, che gestisce le richieste e restituisce viste (ad esempio, HTML).
Main.java
12345678@Controller public class ControllerLevel { @GetMapping("/root") public String getPage() { return "template"; } }
L'annotazione @GetMapping specifica l'URL per una determinata richiesta. Questo significa che aggiungiamo il percorso specificato /root al dominio e, in cambio, riceviamo la pagina corrispondente.
Esempio di utilizzo del Controller
La dipendenza Thymeleaf dal video
Ecco il link alla dipendenza Thymeleaf nel repository Maven.
Ma cosa succede se non segui questo approccio?
In realtà, tecnicamente nulla. Anche se scrivi tutta la logica di business nel controller, ti connetti al database lì e restituisci la risposta al client dallo stesso punto, tutto funzionerà allo stesso modo.
Tuttavia, è improbabile che tu ricordi cosa hai scritto lì dopo alcune settimane, perché tutta la logica dell'applicazione sarà in un unico posto, il che è estremamente scomodo.
Riepilogo
L'architettura a tre livelli offre una chiara separazione delle responsabilità tra i livelli di controllers, services e repositories, rendendo il processo di sviluppo più organizzato e facile da mantenere.
Ogni livello si concentra sul proprio compito specifico, semplificando sia il flusso di lavoro che la gestione del progetto.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 3.45
Architettura a Tre Livelli
Scorri per mostrare il menu
Questo viene fatto per separare la logica specifica in diverse classi/package, invece di scrivere tutto in una singola classe.
L'ordine in cui una richiesta viene elaborata è Controller → Service → Repository. Successivamente, la risposta viene restituita in ordine inverso: Repository -> Service -> Controller. Inizieremo l'implementazione con il layer Repository.
Livello Repository
Questo è il livello più basso, dove riceviamo dati elaborati dal layer Service e li salviamo nel nostro database.
Queste classi sono contrassegnate con l'annotazione @Repository per essere aggiunte al contesto Spring.
Main.java
1234@Repository public class RepositoryLevel { // connect DB }
Esempio di utilizzo del Repository
Livello di Servizio
Qui avviene la logica principale dell'applicazione. Nei servizi, si gestiscono o modificano i dati prima di passarli al repository layer.
Per i servizi, si utilizza l'annotazione @Service, che dichiara la classe come un service contenente la logica di business.
Main.java
1234567@Service public class ServiceLevel { public void logic() { //TODO: write business logic } }
Esempio di utilizzo del Service
Livello Controller
Questo livello gestisce l'interazione iniziale tra il client e il server. Tutte le richieste inviate dal client arrivano qui, ed è responsabile della ricezione dei dati forniti dal client.
Elabora le richieste HTTP in ingresso e restituisce le risposte HTTP. I controller fungono da "ponte" tra il client e la logica di business.
A questo livello, sono utilizzate due annotazioni per designare una classe come controller:
-
@RestController: Dichiara una classe come REST controller, che gestisce le richieste HTTP e restituisce dati in formato JSON; -
@Controller: Dichiara una classe come MVC controller, che gestisce le richieste e restituisce viste (ad esempio, HTML).
Main.java
12345678@Controller public class ControllerLevel { @GetMapping("/root") public String getPage() { return "template"; } }
L'annotazione @GetMapping specifica l'URL per una determinata richiesta. Questo significa che aggiungiamo il percorso specificato /root al dominio e, in cambio, riceviamo la pagina corrispondente.
Esempio di utilizzo del Controller
La dipendenza Thymeleaf dal video
Ecco il link alla dipendenza Thymeleaf nel repository Maven.
Ma cosa succede se non segui questo approccio?
In realtà, tecnicamente nulla. Anche se scrivi tutta la logica di business nel controller, ti connetti al database lì e restituisci la risposta al client dallo stesso punto, tutto funzionerà allo stesso modo.
Tuttavia, è improbabile che tu ricordi cosa hai scritto lì dopo alcune settimane, perché tutta la logica dell'applicazione sarà in un unico posto, il che è estremamente scomodo.
Riepilogo
L'architettura a tre livelli offre una chiara separazione delle responsabilità tra i livelli di controllers, services e repositories, rendendo il processo di sviluppo più organizzato e facile da mantenere.
Ogni livello si concentra sul proprio compito specifico, semplificando sia il flusso di lavoro che la gestione del progetto.
Grazie per i tuoi commenti!