L'architecture de l'application
Listsém est une application en couche. Chaque couche applicative a un rôle propre.
Le domain
Dans le module listsem/domain
.
Il contient toutes les entités représentant les concepts du domaine et la plupart des règles métiers
Le domaine est divisé en sous-domaines qui correspondent à différents « contexte » métier :
gestion
: réunis tous les concepts qui concernent la gestion de demande de participation, du dépôt par les participants à la gestion par les superviseurs ;gestion_requetes
: constitue le pendant « requête » du sous-domaine de gestion, il contient toutes les concepts permettant de requêter les données de gestion ;administration
: réunis tous les concepts qui ne concernent pas directement la gestion, comme par exemple la modélisation des formations et des séminaires.
Les cas d'utilisation
Dans le module listsem/use_cases
.
Contient, pour chaque cas d'utilisation de l'application, le code que orchestre les concepts du domaine pour leur faire réaliser une action particulière.
Les cas d'utilisation couvrent tous les sous-domaines, par exemple :
- « déposer une demande » utilise
gestion
,gestion_requetes
et, indirectement via l'utilisation d'une façade,administration
; - « importer les séminaires » utilise uniquement le
administration
; - etc.
Les interfaces
Dans le module listsem/interfaces
.
Contient le code qui permet de lier les cas d'utilisation à la couche juste au dessus tout en gardant une souplesse d'évolution.
En regardant cette couche, on peut se faire une bonne idée de la manière dont l'application
va être utilisée : to_http.as_html
, to_http.as_json
, to_terminal
, etc.
L'infrastructure
Dans le module listsem/infrastructure
.
Contient tous les détails techniques d'implémentation et d'interaction avec les autres systèmes.
On peut, d'un coup d'œil, voir que l'application va utiliser :
- Flask pour la partie web ;
- SQLAlchemy pour la persistance des données ;
- Typer pour l'interface en ligne de commande ;
- etc.
Chacun de ses éléments est un « détail d'implémentation » et peut-être remplacé sans qu'il n'y ait d'impact sur les couches inférieures de l'application.
Les points d'entrée
Dans le module listsem/entry_points
.
Les points d'entrée assemblent les différentes couches de l'application et mettent
à disposition une interface un ligne de commande (cli
) et un service web (wsgi
).