←← →→

C99.hu

Egy gondolkodtató gyakorló feladatokból álló gyűjtemény. Főbb témák a nyelvspecifikus programozás és a matematika.

Főoldal

A réteges szoftverarchitektúra titka

C++
Nehézség: Gondolkodtató

Egy csapat réteges architektúrában épít egy alkalmazást: UI, szolgáltatás és adattár rétegre bontva. A feladat az, hogy megértse, miért előnyös a felelősségek szétválasztása, és melyik réteg mit csináljon.

#include <iostream>
#include <string>

class UserRepository {
public:
void save(const std::string& name) {
std::cout << "Saving user: " << name << '\n';
}
};

class UserService {
UserRepository repository;

public:
void registerUser(const std::string& name) {
if(name.empty()) {
std::cout << "Invalid user" << '\n';
return;
}
repository.save(name);
}
};

class UserController {
UserService service;

public:
void handleRequest(const std::string& name) {
service.registerUser(name);
}
};

int main() {
UserController controller;
controller.handleRequest("Kovacs Eva");
controller.handleRequest("");
return 0;
}

-- Feladatok:
-- 1. Nevezze meg a három réteget és írja le, melyik mit csinál.
-- 2. Miért nem jó ötlet, ha a UserController közvetlenül menti az adatokat?
-- 3. Melyik rétegben lenne helye az ellenőrzésnek, hogy a név üres-e?
-- 4. Mit nyerünk azzal, hogy a logika szét van bontva?


MegoldásMegoldási ötletek:
1. UI/rétegvezérlő: UserController, szolgáltatásréteg: UserService, adathozzáférés: UserRepository.
2. A controller feladata a kérés fogadása, nem az adatok tárolása; így a felelősségek keveredése elkerülhető.
3. Az ellenőrzés a szolgáltatásrétegben van a legjobb helyen.
4. Jobb tesztelhetőség, karbantarthatóság és kisebb összekapcsoltság érhető el.