Dans l'architecture logicielle, les différentes couches représentent des niveaux logiques de responsabilités et de fonctionnalités. Chaque couche a un rôle spécifique dans le système et contribue à la séparation des préoccupations.
La couche Interface utilisateur gère l'interaction entre les utilisateurs finaux et le système. Elle se concentre sur la présentation des données, l'interaction utilisateur et la collecte des entrées. Cette couche peut inclure des interfaces graphiques, des interfaces de ligne de commande, des API REST, des interfaces web, etc.
La couche Application contient la logique métier spécifique de l'application. Elle coordonne les actions entre les couches supérieures et inférieures en traitant les requêtes, en orchestrant les opérations et en appliquant les règles métier. Cette couche est responsable de la gestion des cas d'utilisation métier et de l'interaction avec la couche Domaine.
La couche Domaine représente le cœur du système. Elle encapsule les concepts métier, les règles, les invariants et les comportements du domaine. Cette couche contient les entités et les ‘value object’ qui représentent les objets du monde réel et leurs interactions. Elle définit également les invariants de domaine et les opérations métier essentielles.
La couche Infrastructure fournit les services techniques nécessaires au fonctionnement du système. Elle gère les aspects techniques tels que la persistance des données, la communication réseau, les services externes, etc. Cette couche permet aux autres couches de se concentrer sur les aspects métier sans se préoccuper des détails d'implémentation technique.