DAO et le modèle de référentiel sont des moyens d'implémenter la couche d'accès aux données (DAL). Commençons donc par DAL, d'abord.
Les applications orientées objet qui accèdent à une base de données doivent avoir une logique pour gérer l'accès à la base de données. Afin de garder le code propre et modulaire, il est recommandé que la logique d'accès à la base de données soit isolée dans un module séparé. Dans l'architecture en couches, ce module est DAL.
Jusqu'à présent, nous n'avons pas parlé d'implémentation particulière: seulement un principe général qui place la logique d'accès à la base de données dans un module séparé.
Maintenant, comment pouvons-nous mettre en œuvre ce principe? Eh bien, une manière connue de l'implémenter, en particulier avec des frameworks comme Hibernate, est le modèle DAO.
Le modèle DAO est un moyen de générer DAL, où généralement, chaque entité de domaine a son propre DAO. Par exemple, User
et UserDao
, Appointment
et AppointmentDao
, etc. Un exemple de DAO avec Hibernate: http://gochev.blogspot.ca/2009/08/hibernate-generic-dao.html .
Alors, quel est le modèle de référentiel? Comme DAO, le modèle de référentiel est également un moyen d'atteindre DAL. Le point principal du modèle de référentiel est que, du point de vue client / utilisateur, il doit ressembler ou se comporter comme une collection. Ce que l'on entend par se comporter comme une collection, ce n'est pas qu'elle doive être instanciée comme Collection collection = new SomeCollection()
. Au lieu de cela, cela signifie qu'il doit prendre en charge des opérations telles que l'ajout, la suppression, la conservation, etc. C'est l'essence même du modèle de référentiel.
En pratique, par exemple dans le cas de l'utilisation d'Hibernate, le modèle de référentiel est réalisé avec DAO. C'est une instance de DAL qui peut être à la fois une instance de modèle DAO et un modèle de référentiel.
Le modèle de référentiel n'est pas nécessairement quelque chose que l'on construit au-dessus de DAO (comme certains le suggèrent). Si les DAO sont conçus avec une interface qui prend en charge les opérations susmentionnées, il s'agit d'une instance de modèle de référentiel. Pensez-y, si les DAO fournissent déjà un ensemble d'opérations de type collection, alors quel est le besoin d'une couche supplémentaire par-dessus?
IRepository
interface. Vous souhaitez que votre référentiel utilise les DAO dans sa mise en œuvre. N'oubliez pas qu'un DAO sera un objet par table, alors qu'un référentiel devra presque toujours utiliser plusieurs DAO pour construire une seule entité. Si vous constatez que ce n'est pas le cas, que votre référentiel et votre entité n'ont besoin d'accéder qu'à une seule table, vous créez probablement un domaine anémique.