Repository
Un repository constitue une couche d'abstraction entre l'application et l'infrastructure. Il encapsule les opérations métier sur les données en masquant les détails techniques, permettant ainsi à la couche application de manipuler les données métier sans se préoccuper de leur implémentation technique.
Exemple
Fonctionnement
C.createRepository<GenericRepository>() est un wrapper de C.createPort<GenericRepository>(). C'est uniquement un alias sémantique pour garder le vocabulaire repository dans votre code.
INFO
createRepository a exactement le même comportement que createPort : même typage, même runtime, même handler retourné.
Déclarer un contrat
Le contrat d'un repository est généralement une interface de l'application layer (ex: findById, save, ...). En interne, ce contrat est géré par la même mécanique que les contrats de port. Selon le contexte, cette déclaration peut aussi être faite côté domaine afin de lier les agrégats au niveau du type avec certains types d'entrées ou de retours des repositories.
Une fois le handler créé, vous pouvez le passer comme dépendance à C.createUseCase(...) et instancier le use case avec une implémentation réelle (infrastructure layer).
Méthodes et Propriétés
Comme createRepository délègue à createPort, l'API exposée est la même :
Méthodes
createImplementation()
Retourne l'implémentation fournie, en s'assurant qu'elle respecte le contrat.
function createImplementation(
implementation: GenericRepository
): GenericRepository