Skip to content

Audit 06 — SOLID

Objectif : verifier le respect des 5 principes SOLID.

Cible : document-parser/ (hors .venv/, __pycache__/), frontend/src/


Checklist

6.1 S — Single Responsibility Principle

# Item Poids
6.1.1 Chaque service a une responsabilite unique (document_service = documents, analysis_service = analyses) 2
6.1.2 Chaque store Pinia gere un seul feature 2
6.1.3 Les routes API sont groupees par ressource (documents.py, analyses.py) 1
6.1.4 Aucune classe ou module ne cumule des responsabilites heterogenes (ex: un service qui fait du parsing ET de la persistence) 2

6.2 O — Open/Closed Principle

# Item Poids
6.2.1 Les ports (domain/ports.py) permettent d'ajouter de nouveaux adaptateurs sans modifier le code existant 2
6.2.2 Le systeme local/remote est extensible via _build_converter() sans modifier les services 2
6.2.3 L'ajout d'un nouveau format d'export ne necessite pas de modifier les endpoints existants 1

6.3 L — Liskov Substitution Principle

# Item Poids
6.3.1 LocalConverter et ServeConverter sont interchangeables (meme protocole, meme contrat de retour) 3
6.3.2 Les implementations de ports ne lancent pas d'exceptions non prevues par le contrat 2
6.3.3 Pas de isinstance() ou type() check pour differencier les implementations 2

6.4 I — Interface Segregation Principle

# Item Poids
6.4.1 DocumentConverter et DocumentChunker sont des ports separes (pas une "god interface") 2
6.4.2 Aucun port ne force une implementation a definir des methodes qu'elle n'utilise pas 2

6.5 D — Dependency Inversion Principle

# Item Poids
6.5.1 Les services dependent de protocoles abstraits (ports), pas d'implementations concretes 3
6.5.2 L'injection se fait dans main.py (composition root) 2
6.5.3 Pas d'instanciation directe d'adaptateurs dans les services (LocalConverter() dans un service = violation) 3

Commandes de verification

# 6.3.3 — isinstance checks sur les adaptateurs
grep -rn "isinstance\|type(" document-parser/services/ --include="*.py"

# 6.5.3 — Instanciation directe d'adaptateurs dans services
grep -rn "LocalConverter\|ServeConverter\|LocalChunker" document-parser/services/ --include="*.py"

# 6.5.1 — Imports directs d'infra dans services
grep -rn "from infra\.\|import infra\." document-parser/services/ --include="*.py"

Regles de notation

  • Tout item de poids 3 non conforme = ecart [CRIT]
  • Tout item de poids 2 non conforme = ecart [MAJ]
  • Tout item de poids 1 non conforme = ecart [MIN]