Projet DDD
Architecture cible
Programmation modulaire
Diviser un programme en modules distincts et indépendants, chacun se concentrant sur une fonctionnalité spécifique.
Chaque module contient sa propre logique, et peut être développé et testé individuellement. Les modules interagissent les uns avec les autres en utilisant des interfaces.
Modularité
Découper un programme en petits modules autonomes et cohérents
Encapsulation
Encapsuler leur logique et exposer des interfaces nécessaires pour interagir avec d'autres modules.
Abstraction
Fournir une abstraction en exposant uniquement les fonctionnalités essentielles nécessaires à leur utilisation
Dépendances
Interfaces utilisées pour spécifier les dépendances et les interactions entre les modules.
Programmation modulaire => DDD
Domain Driven Design
Approche de conception logicielle qui met l'accent sur la modélisation du domaine métier d'une application.
Module = Contexte métier
Contextes bornés
Délimitent les limites conceptuelles d'un contexte métier et définissent des frontières claires entre les sous-contextes

Trois couches
Découpe un contexte métier en trois couches.
Couche Application
Utilise le modèle de domaine pour répondre aux besoins des utilisateurs et gérer les actions de l'utilisateur
Couche Domaine
Cœur métier de l'application. C'est là que se trouve le modèle de domaine qui représente les concepts et les règles métier.
Couche Infrastructure
Détails techniques de l'application, tels que le stockage des données, les communications réseau, les intégrations externes, etc.

Contexte partagé
Un contexte métier commun qui est utilisé par plusieurs contextes / sous-contextes dans une application.

Et concrètement ?
Espace client
Couche Infrastructure
-
Aspects techniques
-
Symfony
-
Doctrine
-
API Platform
Couche Domaine
-
Métier : gérer des clients
-
Règles métiers
-
Interface
Couche Application
-
Actions utilisateurs
-
Opération lecture & écriture
-
CQS



API Platform
Génération automatique d'API
API REST complète à partir d'une simple définition de modèle de données.
Derniers standards
Prend en charge divers formats de données, notamment JSON et JSON-LD.
Génération automatique de doc
Documentation interactive, en utilisant le standard OpenAPI.
Validation des données
Assurer que les données reçues via l'API sont conformes aux règles définies.
Filtrage, tri et pagination
Facilite la mise en œuvre du filtrage, du tri et de la pagination des résultats pour les ressources API.
Sécurité
Gérer l'authentification et l'autorisation des utilisateurs, l'accès aux ressources, la gestion des rôles et des permissions.

CQS, Command Query Separation
Commandes
Opérations qui modifient l'état du système, peuvent avoir des effets de bord, tels que la persistance des données dans une base de données.
Requêtes
Opérations qui ne modifient pas l'état du système, mais qui récupèrent des données.
Séparation des responsabilités
Permet de clarifier les intentions du code et de mieux organiser les responsabilités.



Design Pattern
Specification
Permet d'encapsuler les règles métiers dans des classes.

Instrumentation
Permet d'historiser les processus de l'application.

Tests
Tests unitaires
Vérifier le comportement d'une unité de code isolée, telle qu'une fonction, une méthode ou une classe, en s'assurant qu'elle produit les résultats attendus pour différentes entrées.
Tests fonctionnels
Évaluent le système dans son ensemble et vérifient si les différentes parties de l'application fonctionnent correctement ensemble pour atteindre les objectifs fonctionnels spécifiés.
Tests de dépendances
Analyser les architectures logicielles et détecter les violations des règles de conception.
Projet DDD - Architecture cible
By Kevin Balicot
Projet DDD - Architecture cible
- 48