Software Architecture Patterns by Mark Richards

Key Concepts

Huomaa kuvassa 1-2, että jokainen arkkitehtuurin kerros on merkitty suljetuksi. Tämä on erittäin tärkeä käsite kerroksellisen arkkitehtuurin mallissa. Suljettu kerros tarkoittaa, että kun pyyntö siirtyy kerroksesta toiseen, sen on kuljettava suoraan sen alapuolella olevan kerroksen läpi päästäkseen seuraavaksi alempana olevaan kerrokseen. Esimerkiksi esityskerroksesta lähtevän pyynnön on ensin kuljettava liiketoimintakerroksen ja sen jälkeen pysyvyyskerroksen läpi ennen kuin se päätyy tietokantakerrokseen.

Kuvio 1-2. Suljetut kerrokset ja pyyntöjen pääsy

Miksi siis miksei esityskerrokselle annettaisi suoraa pääsyä joko pysyvyyskerrokseen tai tietokantakerrokseen? Loppujen lopuksi suora tietokantayhteys esityskerroksesta on paljon nopeampi kuin käydä läpi joukko tarpeettomia kerroksia vain hakiakseen tai tallentaakseen tietokantatietoja. Vastaus tähän kysymykseen löytyy keskeisestä käsitteestä, joka tunnetaan nimellä eristyskerrokset.

Isolaatiokerrosten käsite tarkoittaa sitä, että yhdessä arkkitehtuurin kerroksessa tehdyt muutokset eivät yleensä vaikuta tai vaikuta muissa kerroksissa oleviin komponentteihin: muutos on eristetty kyseisessä kerroksessa oleviin komponentteihin ja mahdollisesti toiseen siihen liittyvään kerrokseen (kuten SQL:n sisältävään pysyvyyskerrokseen). Jos esityskerrokselle annetaan suora pääsy pysyvyyskerrokseen, pysyvyyskerroksessa SQL:ään tehdyt muutokset vaikuttaisivat sekä liiketoimintakerrokseen että esityskerrokseen, jolloin syntyisi hyvin tiukasti kytketty sovellus, jossa komponenttien välillä on paljon riippuvuuksia. Tämäntyyppistä arkkitehtuuria on tällöin hyvin vaikea ja kallis muuttaa.

Eristyskerrosten käsite tarkoittaa myös sitä, että kukin kerros on riippumaton muista kerroksista, jolloin sillä on vain vähän tai ei lainkaan tietoa arkkitehtuurin muiden kerrosten sisäisestä toiminnasta. Ymmärtääksesi tämän konseptin voiman ja merkityksen, ajattele suurta refaktorointiponnistusta esityskehyksen muuttamiseksi JSP:stä (Java Server Pages) JSF:ksi (Java Server Faces). Jos oletetaan, että esityskerroksen ja liiketoimintakerroksen välillä käytettävät sopimukset (esim. malli) pysyvät samoina, refaktorointi ei vaikuta liiketoimintakerrokseen, ja se pysyy täysin riippumattomana esityskerroksessa käytettävän käyttöliittymäkehyksen tyypistä.

Vaikka suljetut kerrokset helpottavat eristettyjä kerroksia ja auttavat siten eristämään muutoksia arkkitehtuurin sisällä, on tilanteita, joissa on järkevää, että tietyt kerrokset ovat avoimia. Oletetaan esimerkiksi, että arkkitehtuuriin halutaan lisätä jaettujen palvelujen kerros, joka sisältää yhteisiä palvelukomponentteja, joita liiketoimintakerroksen komponentit käyttävät (esim. data- ja merkkijono-apuohjelmaluokat tai auditointi- ja lokiluokat). Palvelukerroksen luominen on yleensä hyvä idea tässä tapauksessa, koska arkkitehtuurin kannalta se rajoittaa yhteisten palvelujen käytön liiketoimintakerrokseen (eikä esityskerrokseen). Ilman erillistä kerrosta mikään ei arkkitehtuurisesti rajoita esityskerrosta käyttämästä näitä yhteisiä palveluita, mikä vaikeuttaa tämän käyttöoikeusrajoituksen hallintaa.

Tässä esimerkissä uusi palvelukerros sijaitsisi todennäköisesti liiketoimintakerroksen alapuolella osoittaakseen, että tämän palvelukerroksen komponentit eivät ole käytettävissä esityskerroksesta. Tämä aiheuttaa kuitenkin ongelman, koska liiketoimintakerroksen on nyt kuljettava palvelukerroksen läpi päästäkseen pysyvyyskerrokseen, mikä ei ole lainkaan järkevää. Tämä on kerroksellisen arkkitehtuurin ikivanha ongelma, joka ratkaistaan luomalla arkkitehtuuriin avoimia kerroksia.

Kuten kuvassa 1-3 näkyy, palvelukerros on tässä tapauksessa merkitty avoimeksi, mikä tarkoittaa, että pyynnöt voivat ohittaa tämän avoimen kerroksen ja mennä suoraan sen alapuolella olevaan kerrokseen. Seuraavassa esimerkissä, koska palvelukerros on avoin, liiketoimintakerros saa nyt ohittaa sen ja mennä suoraan pysyvyyskerrokseen, mikä on täysin järkevää.

Kuvio 1-3. Avoimet kerrokset ja pyyntöjen virtaus

Avointen ja suljettujen kerrosten käsitteen käyttäminen auttaa määrittelemään arkkitehtuurin kerrosten ja pyyntöjen virtojen välisen suhteen ja antaa myös suunnittelijoille ja kehittäjille tarvittavat tiedot, joiden avulla he voivat ymmärtää arkkitehtuurin eri kerrosten käyttöoikeusrajoitukset. Jos arkkitehtuurin avoimia ja suljettuja kerroksia (ja miksi) ei dokumentoida tai tiedoteta asianmukaisesti, syntyy yleensä tiukasti kytkettyjä ja hauraita arkkitehtuureja, joita on hyvin vaikea testata, ylläpitää ja ottaa käyttöön.

Vastaa

Sähköpostiosoitettasi ei julkaista.