Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Drieniveaustructuur | Spring Boot Basisprincipes
Spring Boot Backend

bookDrieniveaustructuur

Dit wordt gedaan om specifieke logica te scheiden in verschillende klassen/pakketten, in plaats van alles in één klasse te schrijven.

De volgorde waarin een verzoek wordt verwerkt is ControllerServiceRepository. Daarna wordt de respons in omgekeerde volgorde teruggegeven: Repository -> Service -> Controller. We beginnen de implementatie met de Repository laag.

Repository-laag

Dit is de laagste laag, waar we verwerkte gegevens van de Service laag ontvangen en opslaan in onze database.

Deze klassen worden gemarkeerd met de @Repository annotatie om te worden toegevoegd aan de Spring-context.

Main.java

Main.java

copy
1234
@Repository public class RepositoryLevel { // connect DB }

Voorbeeld van het gebruik van de repository

Serviceniveau

Hier vindt de kernlogica van de applicatie plaats. In services verwerken of wijzigen we gegevens voordat we deze doorgeven aan de repositorylaag.

Voor services gebruiken we de @Service annotatie, waarmee de klasse wordt aangeduid als een service die de bedrijfslogica bevat.

Main.java

Main.java

copy
1234567
@Service public class ServiceLevel { public void logic() { //TODO: write business logic } }

Voorbeeld van het gebruik van de Service

Controllerlaag

Deze laag verzorgt de eerste interactie tussen de client en de server. Alle verzoeken die door de client worden verzonden, komen hier aan en deze laag is verantwoordelijk voor het ontvangen van de gegevens geleverd door de client.

Het verwerkt binnenkomende HTTP-verzoeken en retourneert HTTP-antwoorden. Controllers fungeren als een "brug" tussen de client en de bedrijfslogica.

Op dit niveau worden twee annotaties gebruikt om een klasse aan te duiden als een controller:

  • @RestController: Verklaart een klasse tot een REST-controller, die HTTP-verzoeken afhandelt en gegevens retourneert in JSON-formaat;

  • @Controller: Verklaart een klasse tot een MVC-controller, die verzoeken afhandelt en weergaven retourneert (bijvoorbeeld HTML).

Main.java

Main.java

copy
12345678
@Controller public class ControllerLevel { @GetMapping("/root") public String getPage() { return "template"; } }

De @GetMapping annotatie specificeert de URL voor een gegeven verzoek. Dit betekent dat we het gespecificeerde pad /root aan het domein toevoegen, en in ruil daarvoor ontvangen we de overeenkomende pagina.

Voorbeeld van het gebruik van de Controller

De Thymeleaf-verslaving uit de video

Hier is de link naar de Thymeleaf afhankelijkheid in de Maven repository.

Maar wat gebeurt er als je deze aanpak niet volgt?

Eigenlijk gebeurt er technisch gezien niets. Zelfs als je alle bedrijfslogica in de controller schrijft, daar verbinding maakt met de database en het antwoord naar de client vanaf dezelfde plek retourneert, zal alles hetzelfde werken.

Echter, je zult je waarschijnlijk niet meer herinneren wat je daar hebt geschreven na een paar weken, omdat alle applicatielogica op één plek staat, wat uitermate onhandig is.

Samenvatting

De drie-lagenarchitectuur biedt een duidelijke scheiding van verantwoordelijkheden tussen de lagen van controllers, services en repositories, waardoor het ontwikkelproces meer gestructureerd en beter onderhoudbaar wordt.

Elke laag richt zich op zijn specifieke taak, wat zowel de workflow als het projectbeheer vereenvoudigt.

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 5

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Suggested prompts:

Can you explain the main responsibilities of each layer in the three-tier architecture?

How does the data flow between the controller, service, and repository layers?

Why is it important to separate logic into different layers instead of using a single class?

Awesome!

Completion rate improved to 3.45

bookDrieniveaustructuur

Veeg om het menu te tonen

Dit wordt gedaan om specifieke logica te scheiden in verschillende klassen/pakketten, in plaats van alles in één klasse te schrijven.

De volgorde waarin een verzoek wordt verwerkt is ControllerServiceRepository. Daarna wordt de respons in omgekeerde volgorde teruggegeven: Repository -> Service -> Controller. We beginnen de implementatie met de Repository laag.

Repository-laag

Dit is de laagste laag, waar we verwerkte gegevens van de Service laag ontvangen en opslaan in onze database.

Deze klassen worden gemarkeerd met de @Repository annotatie om te worden toegevoegd aan de Spring-context.

Main.java

Main.java

copy
1234
@Repository public class RepositoryLevel { // connect DB }

Voorbeeld van het gebruik van de repository

Serviceniveau

Hier vindt de kernlogica van de applicatie plaats. In services verwerken of wijzigen we gegevens voordat we deze doorgeven aan de repositorylaag.

Voor services gebruiken we de @Service annotatie, waarmee de klasse wordt aangeduid als een service die de bedrijfslogica bevat.

Main.java

Main.java

copy
1234567
@Service public class ServiceLevel { public void logic() { //TODO: write business logic } }

Voorbeeld van het gebruik van de Service

Controllerlaag

Deze laag verzorgt de eerste interactie tussen de client en de server. Alle verzoeken die door de client worden verzonden, komen hier aan en deze laag is verantwoordelijk voor het ontvangen van de gegevens geleverd door de client.

Het verwerkt binnenkomende HTTP-verzoeken en retourneert HTTP-antwoorden. Controllers fungeren als een "brug" tussen de client en de bedrijfslogica.

Op dit niveau worden twee annotaties gebruikt om een klasse aan te duiden als een controller:

  • @RestController: Verklaart een klasse tot een REST-controller, die HTTP-verzoeken afhandelt en gegevens retourneert in JSON-formaat;

  • @Controller: Verklaart een klasse tot een MVC-controller, die verzoeken afhandelt en weergaven retourneert (bijvoorbeeld HTML).

Main.java

Main.java

copy
12345678
@Controller public class ControllerLevel { @GetMapping("/root") public String getPage() { return "template"; } }

De @GetMapping annotatie specificeert de URL voor een gegeven verzoek. Dit betekent dat we het gespecificeerde pad /root aan het domein toevoegen, en in ruil daarvoor ontvangen we de overeenkomende pagina.

Voorbeeld van het gebruik van de Controller

De Thymeleaf-verslaving uit de video

Hier is de link naar de Thymeleaf afhankelijkheid in de Maven repository.

Maar wat gebeurt er als je deze aanpak niet volgt?

Eigenlijk gebeurt er technisch gezien niets. Zelfs als je alle bedrijfslogica in de controller schrijft, daar verbinding maakt met de database en het antwoord naar de client vanaf dezelfde plek retourneert, zal alles hetzelfde werken.

Echter, je zult je waarschijnlijk niet meer herinneren wat je daar hebt geschreven na een paar weken, omdat alle applicatielogica op één plek staat, wat uitermate onhandig is.

Samenvatting

De drie-lagenarchitectuur biedt een duidelijke scheiding van verantwoordelijkheden tussen de lagen van controllers, services en repositories, waardoor het ontwikkelproces meer gestructureerd en beter onderhoudbaar wordt.

Elke laag richt zich op zijn specifieke taak, wat zowel de workflow als het projectbeheer vereenvoudigt.

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 5
some-alt