Skip to content

Separation of Concerns (SoC)

Miért?
Ha egy darab kódnak nincsen egy világosan meghatározott feladata, akkor nehéz lesz megérteni, használni és adott esetben javítani vagy bővíteni.

Ha egy darab kódnak nincsen egy világosan meghatározott feladata, akkor nehéz lesz megérteni, használni és adott esetben javítani vagy bővíteni.
Vonatkozások szétválasztásaként fordítható. Ez az elv azt jelenti, hogy nem szabad több funkcionalitást egy osztályban összefoglalni. Mik azok a vonatkozások? Különböző vonatkozások a „teljesen különböző” célok. Azt is mondják, hogy a vonatkozások egymásra ortogonálisak, és legfőképpen a funkcionalitási egység fő feladatára ortogonálisak. Tipikus példák a különböző vonatkozásokra: Tracing, Logging, tranzakcionalitás, cache-elés. Ezeket a vonatkozásokat a Separation of Concerns-elv alapján specializált funkcionális egységekbe kellene kihelyezni.A Separation of Concerns-elv szorosan összefügg a Single Responsibility-elvvel. Így a felelősségek (responsibility) befoglaló halmaza a vonatkozások (concern). Ideális esetben minden vonatkozás (concern) egy felelősségből (responsibility) áll, mégpedig a főfeladat felelősségéből. Egy felelősségben (responsibility) gyakran több vonatkozás (concern) keveredik. Mivel ez műszakilag gyakran elkerülhetetlen, ezért az elv nem azt mondja ki, hogy a felelősség (responsibility) csak egy vonatkozásból (concern) állhat, hanem hogy a vonatkozásokat el kell különíteni. Egy eljáráson belül például tisztán felismerhetőnek kell lennie, hogy több felelősség (concern) van. Továbbá a vonatkozásokat (concerns) nem szabad vadul szétszórni az eljárásban, hanem úgy kell őket csoportosítani, hogy világos legyen, melyik tartozik egy vonatkozáshoz (concern).

A Domain Driven Design-ban például megpróbáljuk a Business Domain-t szigorúan elkülöníteni az infrastruktúrától. Így ott a Business Domain egy osztálya nem tartalmazhat infrastruktúrát, pl. adatelérést, hanem csak és kizárólag az üzleti logikát képezheti le. A perzisztencia egy „vonatkozás (concern)”, aminek semmi köze az üzleti logikához. A Separation of Concerns laza csatoláshoz (coupling) és erős összetartáshoz (cohesion) vezet. Az egyes komponensek egyenként egy feladatra, egy vonatkozásra (concern) fókuszálnak és ezáltal könnyen megérthetők. Minden rész, amiből a komponens felépül, erre az egy feladatra van kihegyezve, ezáltal a darabok szorosan összefüggnek (erős összetartás (cohesion). A Separation of Concerns továbbá jól tesztelhető komponenseket is eredményez. Mert ha egy kódegység célja fókuszált, akkor kevésbé széles teszteket kell készíteni. A tesztelendő kódegység tekintetében kevesebb tesztparaméter-kombinációt kell ellenőrizni. Amennyiben a vonatkozások szétválasztását konzekvensen használják, akkor az objektumorientáltságot ki kell egészíteni az aspektusorientált programozással (AOP). Ezáltal lehetségessé válik az aspektusok, mint pl. a tranzakcionalitás, tracing és a cache-elés, teljes kiemelése az eljárásokból.

Published inElvek