Ugrás a tartalomhoz

separation of concerns

A Wikiszótárból, a nyitott szótárból


Főnév

separation of concerns (tsz. separation of concernses)

  1. (informatika) Separation of Concerns (SoC) – azaz „felelősségi körök szétválasztása” – egy alapelv a szoftvertervezésben, amely szerint a programot különálló, jól elkülönített részekre kell bontani, ahol minden rész egy jól meghatározott feladatért (concern) felel.



🔹 Fogalom magyarázata

A „concern” jelenthet:

  • egy adott funkcionális részfeladatot (pl. adatbevitel, feldolgozás, megjelenítés),
  • vagy keresztmetszeti funkciókat (pl. hibakezelés, naplózás, biztonság).

A Separation of Concerns célja, hogy minden ilyen felelősség elkülönítve legyen a többitől, ezáltal:

  • könnyebb legyen érteni,
  • könnyebb legyen karbantartani,
  • és könnyebb legyen tesztelni a programot.



🔹 Példa – MVC mint SoC

A Model-View-Controller (MVC) architektúra egy klasszikus példa a SoC megvalósítására:

Komponens Feladata (concern)
Model Az üzleti logika, adatok kezelése
View A felhasználói felület megjelenítése
Controller A felhasználói input kezelése

Ezek elkülönítése azt jelenti, hogy a View nem tartalmaz logikát, a Model nem tartalmaz UI elemeket, stb.



🔹 Miért hasznos?

Előny Magyarázat
Karbantarthatóság Könnyen módosíthatod egy részét anélkül, hogy a többihez kellene nyúlni.
Tesztelhetőség Külön-külön tudod tesztelni az egyes modulokat.
Újrafelhasználhatóság Egy adott „concern” (pl. naplózás) más projektekben is használható.
Fejlesztői együttműködés Több fejlesztő dolgozhat különböző komponenseken, konfliktus nélkül.



🔹 Ellenpélda

Egy nagy main() függvény, ami:

  • beolvassa a fájlt,
  • feldolgozza az adatokat,
  • megjeleníti őket a képernyőn,
  • naplózza a hibákat,

…mindezt egyetlen helyen, összeolvasztva. Ez egy anti-pattern, amit a SoC elkerülni próbál.



🔹 Separation of Concerns vs Single Responsibility Principle

  • Separation of Concerns egy magasabb szintű architekturális elv.
  • Single Responsibility Principle (SRP) az egy-egy osztály vagy függvény szintjén mondja ugyanezt: minden osztály egyetlen dolgot csináljon.

Gondolhatunk úgy rájuk, mint makro (SoC) és mikro (SRP) szintű szabályokra.



🔹 Alkalmazása különböző területeken

Terület Megvalósítás
Webfejlesztés HTML (megjelenítés), CSS (stílus), JS (logika)
C++ program Header fájlok (definíciók), .cpp fájlok (implementáció), külön osztályok
REST API Router (útvonal), Controller (logika), Service (üzleti réteg), DAO (adatelérés)
Adatbázis Táblák, nézetek (views), tárolt eljárások, triggerek elkülönítése



🔹 Kódpélda (C++)

// InputHandler.h
class InputHandler {
public:
    std::string getInput();
};

// DataProcessor.h
class DataProcessor {
public:
    std::string process(const std::string& data);
};

// Display.h
class Display {
public:
    void show(const std::string& result);
};
// main.cpp
int main() {
    InputHandler input;
    DataProcessor processor;
    Display output;

    std::string data = input.getInput();
    std::string result = processor.process(data);
    output.show(result);
}

Ez szétválasztja az adatbevitelt, feldolgozást, és megjelenítést – tehát érvényesül a SoC.



🔹 Összefoglalás

Szempont Separation of Concerns
Fogalom Felelősségek elkülönítése modulokra
Előnyök Tisztább kód, könnyebb tesztelés, jobb karbantarthatóság
Ellenpélda Monolitikus „mind egyben” kód
Kapcsolódó elvek Single Responsibility Principle, Clean Architecture, SOLID