L'idée de la couche de dépôt, telle que je la comprends, est que vous puissiez rapidement et facilement remplacer une solution par une autre. Supposons que je veuille passer de MySQL à MongoDB. Je n'ai qu'à me soucier d'écrire une nouvelle couche de dépôt.
Jusqu'à présent, tout va bien.
Le problème est que MySQL utilisera (très probablement, en pratique) des entiers comme clés primaires, et MongoDB des chaînes de caractères. Ou peut-être que je veux que ma couche de référentiel pointe vers un service web, et qui sait quel type d'identifiants ils utilisent...
Ainsi, afin de donner à ma couche de dépôt une interface à l'épreuve du temps, je ne peux pas avoir de méthodes comme celles qui suivent :
EmployeeRepository.getById(int id)
ou
EmployeeRepository.getById(string id)
Que faire alors ? Toujours utiliser une chaîne de caractères (ou un objet ? ??) et laisser la couche de dépôt la convertir comme elle le souhaite ?
Ou bien les modèles d'une application devraient-ils avoir leur propre schéma d'identification interne, totalement distinct du schéma d'identification de la base de données, et la recherche devrait-elle toujours s'effectuer sur la base de cet identifiant ? Quelque chose comme :
EmployeeRepository.getByInternalId(int id)
Quelle est la meilleure pratique en la matière ?