Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Kolmitasoinen Arkkitehtuuri | Spring Bootin Perusteet
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Spring Boot Backend

bookKolmitasoinen Arkkitehtuuri

Tämä tehdään, jotta erityinen logiikka voidaan jakaa eri luokkiin/paketteihin sen sijaan, että kaikki kirjoitettaisiin yhteen luokkaan.

Pyyntö käsitellään seuraavassa järjestyksessä: ControllerServiceRepository. Tämän jälkeen vastaus palautetaan käänteisessä järjestyksessä: Repository -> Service -> Controller. Aloitamme toteutuksen Repository-kerroksesta.

Repository-taso

Tämä on alin kerros, jossa vastaanotetaan käsiteltyä dataa Service kerrokselta ja tallennetaan sen tietokantaan.

Nämä luokat merkitään @Repository annotaatiolla, jotta ne lisätään Spring-kontekstiin.

Main.java

Main.java

copy

Esimerkki repositoryn käytöstä

Palvelutaso

Tässä tapahtuu sovelluksen ydinlogiikka. Serviceissä käsitellään tai muokataan dataa ennen sen siirtämistä repository-kerrokseen.

Service-luokissa käytetään @Service annotaatiota, joka määrittelee luokan service, joka sisältää liiketoimintalogiikan.

Main.java

Main.java

copy

Esimerkki servicen käytöstä

Ohjainkerros

Tämä kerros käsittelee alkuperäisen vuorovaikutuksen asiakkaan ja palvelimen välillä. Kaikki pyynnöt, jotka lähetetään asiakkaalta, saapuvat tänne, ja se on vastuussa asiakkaan toimittamien tietojen vastaanottamisesta.

Se käsittelee saapuvat HTTP-pyynnöt ja palauttaa HTTP-vastaukset. Ohjaimet toimivat "siltana" asiakkaan ja liiketoimintalogiikan välillä.

Tällä tasolla käytetään kahta annotaatiota luokan määrittämiseksi ohjaimeksi:

  • @RestController: Määrittää luokan REST-ohjaimeksi, joka käsittelee HTTP-pyynnöt ja palauttaa tiedot JSON-muodossa;

  • @Controller: Määrittää luokan MVC-ohjaimeksi, joka käsittelee pyynnöt ja palauttaa näkymiä (esim. HTML).

Main.java

Main.java

copy

@GetMapping -annotaatio määrittää URL-osoitteen tietylle pyynnölle. Tämä tarkoittaa, että lisäämme määritetyn polun /root verkkotunnukseen, ja vastineeksi saamme vastaavan sivun.

Esimerkki ohjaimen käytöstä

Videolla esiintyvä Thymeleaf-riippuvuus

Tässä on linkki Thymeleaf-riippuvuuteen Maven-repositorioon.

Mutta mitä tapahtuu, jos tätä lähestymistapaa ei noudateta?

Teknisesti ottaen ei mitään. Vaikka kirjoittaisit kaiken liiketoimintalogiikan controlleriin, yhdistäisit tietokantaan siellä ja palauttaisit vastauksen asiakkaalle samasta paikasta, kaikki toimii silti samalla tavalla.

Kuitenkin et todennäköisesti muista mitä kirjoitit sinne muutaman viikon kuluttua, koska kaikki sovelluslogiikka on yhdessä paikassa, mikä on erittäin hankalaa.

Yhteenveto

Kolmitasoinen arkkitehtuuri tarjoaa selkeän erottelun controllers-, services- ja repositories-kerrosten välillä, mikä tekee kehitysprosessista järjestelmällisemmän ja helpommin ylläpidettävän.

Jokainen kerros keskittyy omaan tehtäväänsä, mikä yksinkertaistaa sekä työnkulkua että projektinhallintaa.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 5

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

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?

bookKolmitasoinen Arkkitehtuuri

Pyyhkäise näyttääksesi valikon

Tämä tehdään, jotta erityinen logiikka voidaan jakaa eri luokkiin/paketteihin sen sijaan, että kaikki kirjoitettaisiin yhteen luokkaan.

Pyyntö käsitellään seuraavassa järjestyksessä: ControllerServiceRepository. Tämän jälkeen vastaus palautetaan käänteisessä järjestyksessä: Repository -> Service -> Controller. Aloitamme toteutuksen Repository-kerroksesta.

Repository-taso

Tämä on alin kerros, jossa vastaanotetaan käsiteltyä dataa Service kerrokselta ja tallennetaan sen tietokantaan.

Nämä luokat merkitään @Repository annotaatiolla, jotta ne lisätään Spring-kontekstiin.

Main.java

Main.java

copy

Esimerkki repositoryn käytöstä

Palvelutaso

Tässä tapahtuu sovelluksen ydinlogiikka. Serviceissä käsitellään tai muokataan dataa ennen sen siirtämistä repository-kerrokseen.

Service-luokissa käytetään @Service annotaatiota, joka määrittelee luokan service, joka sisältää liiketoimintalogiikan.

Main.java

Main.java

copy

Esimerkki servicen käytöstä

Ohjainkerros

Tämä kerros käsittelee alkuperäisen vuorovaikutuksen asiakkaan ja palvelimen välillä. Kaikki pyynnöt, jotka lähetetään asiakkaalta, saapuvat tänne, ja se on vastuussa asiakkaan toimittamien tietojen vastaanottamisesta.

Se käsittelee saapuvat HTTP-pyynnöt ja palauttaa HTTP-vastaukset. Ohjaimet toimivat "siltana" asiakkaan ja liiketoimintalogiikan välillä.

Tällä tasolla käytetään kahta annotaatiota luokan määrittämiseksi ohjaimeksi:

  • @RestController: Määrittää luokan REST-ohjaimeksi, joka käsittelee HTTP-pyynnöt ja palauttaa tiedot JSON-muodossa;

  • @Controller: Määrittää luokan MVC-ohjaimeksi, joka käsittelee pyynnöt ja palauttaa näkymiä (esim. HTML).

Main.java

Main.java

copy

@GetMapping -annotaatio määrittää URL-osoitteen tietylle pyynnölle. Tämä tarkoittaa, että lisäämme määritetyn polun /root verkkotunnukseen, ja vastineeksi saamme vastaavan sivun.

Esimerkki ohjaimen käytöstä

Videolla esiintyvä Thymeleaf-riippuvuus

Tässä on linkki Thymeleaf-riippuvuuteen Maven-repositorioon.

Mutta mitä tapahtuu, jos tätä lähestymistapaa ei noudateta?

Teknisesti ottaen ei mitään. Vaikka kirjoittaisit kaiken liiketoimintalogiikan controlleriin, yhdistäisit tietokantaan siellä ja palauttaisit vastauksen asiakkaalle samasta paikasta, kaikki toimii silti samalla tavalla.

Kuitenkin et todennäköisesti muista mitä kirjoitit sinne muutaman viikon kuluttua, koska kaikki sovelluslogiikka on yhdessä paikassa, mikä on erittäin hankalaa.

Yhteenveto

Kolmitasoinen arkkitehtuuri tarjoaa selkeän erottelun controllers-, services- ja repositories-kerrosten välillä, mikä tekee kehitysprosessista järjestelmällisemmän ja helpommin ylläpidettävän.

Jokainen kerros keskittyy omaan tehtäväänsä, mikä yksinkertaistaa sekä työnkulkua että projektinhallintaa.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 5
some-alt