Salta el contingut

Arquitectura per capes

El servidor és el nucli de l'aplicació, ja que és l'encarregat de gestionar tota la lògica de negoci i l'accés a les dades. Per a mantindre'l organitzat, mantenible i fàcil d'ampliar, la seua implementació ha de seguir una arquitectura per capes, que permeta separar les diferents responsabilitats de l'aplicació i facilite la seua evolució i manteniment.

Capes de l'arquitectura

Arquitectura per capes de l'aplicació Arquitectura per capes de l'aplicació

Figura 1. Arquitectura per capes de l'aplicació.

Les capes que s'han de definir en el servidor són les següents:

  • Controladors: és la "cara visible" del servidor. Defineix les rutes (endpoints) de l'API REST i s'encarrega de gestionar les peticions de l'usuari i de retornar les respostes adequades.

    Responsabilitats:

    • Definir les rutes (/productes, /usuaris, etc.).
    • Extraure les dades de la petició (paràmetres de la URL, cos JSON, capçaleres).
    • Cridar a la funció corresponent de la capa de Domini.
    • Retornar el codi d'estat HTTP adequat (200, 201, 400, 404, 500).
  • Domini: és el "cervell" de l'aplicació, on resideix la lògica de negoci. Ací es decideix què es pot fer i què no, seguint les regles del projecte.

    Aquesta capa conté:

    • Entitats: Classes que representen els objectes de negoci de l'aplicació.
    • Serveis: Classes que contenen la lògica de negoci de l'aplicació.

    Responsabilitats:

    • Realitzar validacions de seguretat o de coherència.
    • Processar dades (filtrar, ordenar, transformar).
    • Coordinar múltiples operacions.
    • Cridar a la capa de Persistència per llegir o guardar informació.
  • Persistència: és l'única capa que té permís per a parlar amb la base de dades. El seu objectiu és abstreure la resta de l'aplicació dels detalls concrets de com es guarden i es consulten les dades.

    Aquesta capa conté:

    • Repositoris: Classes que s'encarreguen de gestionar l'accés a les dades de l'aplicació.
    • DAOs: Classes que s'encarreguen de realitzar les consultes a la base de dades.
    • RowMappers: Classes que s'encarreguen de mapar les files de la base de dades a entitats de domini.

    Responsabilitats:

    • Executar les consultes SQL.
    • Convertir el resultat de les consultes a entitats de domini.
    • Gestionar la connexió amb la base de dades.

Importància de les interfícies

Dins d'una arquitectura per capes, les interfícies actuen com un contracte entre les diferents capes del sistema: defineixen què fa un component sense determinar com ho fa.

L'ús d'interfícies aporta:

  • Desacoblament: la implementació de cada capa és independent de les altres, i es pot canviar sense afectar la resta del sistema.

    Per exemple, si es vol canviar la base de dades de MariaDB a MongoDB, sols cal modificar la capa de persistència.

  • Facilitat per a fer proves: permeten substituir una implementació real per un objecte simulat (mock) que emula el seu comportament, per a provar cada capa de manera aïllada.

  • Inversió de dependències: seguint els principis SOLID, les capes superiors no depenen de les capes inferiors, sinó d'abstraccions. Això minimitza l'impacte de futurs canvis o migracions de tecnologia.