Aller au contenu

Architecture

Architecture en couches suivant le flux : User > facade > models > generated models > client > api

  1. Façades de domaine (fonds/) : API de haut niveau par fonds documentaire
    • JURI (jurisprudence) - implémenté
    • LODA, CODE, JORF - à venir
  2. Modèles de domaine (models/) : Structures de données métier
  3. Modèles générés (models/generated/) : Modèles pour l'API
  4. Client API (client.py) : Communication avec l'API Legifrance

Pourquoi cette architecture ?

La séparation entre fonds/juri.py et models/juri/ suit un principe fondamental : séparer l'interface utilisateur de la logique technique.

  1. fonds/ : Façade de domaine

    • Offre une API stable et intuitive pour les développeurs et juristes
    • Masque la complexité technique de l'API Legifrance
    • Fournit des objets métier enrichis avec des méthodes utiles
    • Protège le code client des changements dans l'API sous-jacente
  2. models/ : Modèles de données

    • Définit la structure précise des données juridiques
    • Assure la validation via Pydantic (typage fort, contraintes)
    • Gère la conversion bidirectionnelle avec les modèles d'API
    • Organise le code par préoccupation technique

Cette architecture en couches permet un flux de données clair (User > facade > models > generated models > client > api) tout en offrant une séparation des responsabilités qui facilite la maintenance et l'évolution du code.

Diagrammes C4

Diagrammes basés sur C4 Model - du contexte global aux composants détaillés.

Niveau 1 : Diagramme de contexte système

uml diagram

Niveau 2 : Diagramme des conteneurs

uml diagram

Niveau 3 : Diagramme des composants

uml diagram

Flux de données

flowchart TD
    dev[Développeur]
    facade[Façade fonds/juri.py]
    models[Modèles models/juri/]
    gen[Modèles générés models/generated/]
    client[LegifranceClient]
    api[API Legifrance]

    dev -->|"[1] Appelle"| facade
    facade -->|"[2] Utilise"| models
    models -->|"[3] to_api_model"| gen
    gen -->|"[4] Utilisé par"| client
    client -->|"[5] Envoie requête"| api

    api -->|"[6] Réponse"| client
    client -->|"[7] Transmet"| gen
    gen -->|"[8] from_api_model"| models
    models -->|"[9] Traitement"| facade
    facade -->|"[10] Objets enrichis"| dev

    classDef external fill:#999,stroke:#333,stroke-width:2px
    classDef core fill:#9cf,stroke:#333,stroke-width:2px

    class dev,api external
    class facade,models,gen,client core

Avantages clés

  • Stabilité : Interface publique indépendante des changements d'API
  • Modèles métier : Fonctionnalités spécifiques au domaine juridique
  • Validation robuste : Typage et validation via Pydantic
  • Structure intuitive : Organisation par fonds documentaires juridiques