# TP4 Repository Question e)

## Différence entre DAO et Repository

Le DAO fournit une abstraction technique pour accéder à une base de données relationnelle.  
Un DAO est généralement fortement couplé :
- au SQL ;
- à la structure des tables ;
- à la technologie d’accès aux données (JDBC, JPA).

Chaque DAO représente souvent une table et expose des méthodes techniques telles que :
`insert`, `update`, `findById`, etc.

Le Repository représente une collection d’objets métier et non une table.  
Un Repository fournit une abstraction métier, totalement indépendante :
- du SQL ;
- de JPA ;
- de la base de données.

Il cache complètement la logique de persistance.

## Avantages du Repository par rapport à l’utilisation directe de JPA

L’utilisation du patron Repository présente plusieurs avantages :

- Découplage du métier :
  La couche service ne dépend plus de l’API JPA (`EntityManager`, transactions, requêtes).

- Séparation des responsabilités :
  La persistance est isolée dans le Repository, le service se concentre uniquement sur la logique métier.

- Évolutivité :
  La technologie de persistance peut être modifiée (JPA, autre ORM, web service, etc.)
  sans impacter la couche métier.

Le patron Repository constitue la base conceptuelle des frameworks modernes tels que
Spring Data JPA ou Spring Boot, qui automatisent son implémentation. J'utilise ce dernier en entreprise dans le cadre de mon alternance au Crédit Agricole.

## Conclusion

Le DAO est une abstraction technique orientée base de données,  
tandis que le Repository est une abstraction métier orientée domaine.  
Le Repository permet une architecture plus propre, modulaire et maintenable,
en particulier dans les applications à forte logique métier comme en banque.