Software Architecture Patterns by Mark Richards

Key Concepts

Az 1-2. ábrán észrevehetjük, hogy az architektúra minden egyes rétege zártnak van jelölve. Ez egy nagyon fontos fogalom a réteges architektúra mintában. A zárt réteg azt jelenti, hogy amikor egy kérés rétegről rétegre halad, a közvetlenül alatta lévő rétegen kell áthaladnia, hogy eljusson az alatta lévő következő réteghez. Például a prezentációs rétegből érkező kérésnek először az üzleti rétegen, majd a perszisztencia-rétegen kell áthaladnia, mielőtt végül eléri az adatbázis-réteget.

1-2. ábra. Zárt rétegek és a kérések elérése

Miért ne lehetne tehát a prezentációs rétegnek közvetlen hozzáférést biztosítani akár a perszisztencia réteghez, akár az adatbázis réteghez? Elvégre a prezentációs rétegből történő közvetlen adatbázis-hozzáférés sokkal gyorsabb, mintha egy csomó felesleges rétegen kellene keresztülmennünk csak azért, hogy lekérdezzük vagy elmentsük az adatbázis-információkat. A válasz erre a kérdésre az izolációs rétegek néven ismert kulcsfogalomban rejlik.

A szigetelés rétegei koncepció azt jelenti, hogy az architektúra egyik rétegében végzett változtatások általában nem befolyásolják vagy érintik más rétegek komponenseit: a változtatás az adott rétegen belüli komponensekre és esetleg egy másik kapcsolódó rétegre (például egy SQL-t tartalmazó perszisztencia rétegre) van elszigetelve. Ha a prezentációs rétegnek közvetlen hozzáférést biztosítunk a perszisztencia réteghez, akkor a perszisztencia rétegben az SQL-ben végrehajtott változtatások mind az üzleti rétegre, mind a prezentációs rétegre hatással lennének, és így egy nagyon szorosan összekapcsolt alkalmazást hoznánk létre, sok kölcsönös függőséggel a komponensek között. Az ilyen típusú architektúrát nagyon nehéz és költséges lesz megváltoztatni.

A szigetelés rétegei koncepció azt is jelenti, hogy az egyes rétegek függetlenek a többi rétegtől, és ezáltal alig vagy egyáltalán nem ismerik az architektúra más rétegeinek belső működését. Hogy megértsük ennek a koncepciónak az erejét és fontosságát, gondoljunk egy nagyszabású refaktorálási erőfeszítésre, amelynek célja a prezentációs keretrendszer átalakítása JSP-ről (Java Server Pages) JSF-re (Java Server Faces). Feltételezve, hogy a prezentációs réteg és az üzleti réteg között használt szerződések (pl. modell) ugyanazok maradnak, az üzleti réteget nem érinti a refaktorálás, és teljesen független marad a prezentációs réteg által használt felhasználói felület keretrendszer típusától.

Míg a zárt rétegek megkönnyítik az elszigetelt rétegeket, és ezért segítenek elszigetelni a változásokat az architektúrán belül, vannak esetek, amikor bizonyos rétegeknek érdemes nyitottnak lenniük. Tegyük fel például, hogy egy megosztott szolgáltatási réteget szeretnénk hozzáadni egy architektúrához, amely olyan közös szolgáltatási komponenseket tartalmaz, amelyekhez az üzleti rétegen belüli komponensek hozzáférnek (pl. adat- és string segédosztályok vagy auditálási és naplózási osztályok). A szolgáltatási réteg létrehozása ebben az esetben általában jó ötlet, mert építészetileg a megosztott szolgáltatásokhoz való hozzáférést az üzleti rétegre (és nem a megjelenítési rétegre) korlátozza. Külön réteg nélkül építészetileg semmi sem korlátozza a prezentációs réteget abban, hogy hozzáférjen ezekhez a közös szolgáltatásokhoz, ami megnehezíti a hozzáférés korlátozásának szabályozását.

Ebben a példában az új szolgáltatási réteg valószínűleg az üzleti réteg alatt helyezkedne el, hogy jelezze, hogy az ebben a szolgáltatási rétegben lévő komponensek nem érhetők el a prezentációs rétegből. Ez azonban problémát jelent, mivel az üzleti rétegnek most a szolgáltatási rétegen keresztül kell áthaladnia, hogy elérje a perszisztencia réteget, aminek egyáltalán nincs értelme. Ez egy ősrégi probléma a réteges architektúrával kapcsolatban, és az architektúrán belül nyitott rétegek létrehozásával oldható meg.

Az 1-3. ábrán látható módon a szolgáltatási réteg ebben az esetben nyitottként van megjelölve, ami azt jelenti, hogy a kérések megkerülhetik ezt a nyitott réteget, és közvetlenül az alatta lévő réteghez mehetnek. A következő példában, mivel a szolgáltatási réteg nyitott, az üzleti réteg most már megkerülheti azt, és közvetlenül a perszisztencia réteghez mehet, aminek tökéletes értelme van.

1-3. ábra. Nyitott rétegek és kérésáramlás

A nyitott és zárt rétegek fogalmának használata segít meghatározni az architektúra rétegei és a kérésáramlás közötti kapcsolatot, valamint a tervezők és fejlesztők számára is biztosítja a szükséges információkat az architektúrán belüli különböző réteg-hozzáférési korlátozások megértéséhez. Ha nem dokumentáljuk vagy nem kommunikáljuk megfelelően, hogy az architektúra mely rétegei nyíltak és zártak (és miért), az általában szorosan összekapcsolt és törékeny architektúrákat eredményez, amelyeket nagyon nehéz tesztelni, karbantartani és telepíteni.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.