> Tech > Repository en mémoire

Repository en mémoire

Tech - Par Renaud ROSSET - Publié le 30 novembre 2010
email

Il est étonnant de voir l’étendue des fonctionnalités de base de données en mémoire créables avec une seule instance de List et du code LINQ (Language Integrated Query). La partie la plus difficile à implémenter est de générer les valeurs IDENTITY et, encore, cela revient seulement à incrémenter une

Repository en mémoire

variable integer. Si vous concevez votre implémentation de substitution afin d’employer des génériques, vous pouvez créer quasiment instantanément un Repository de substitution capable d’émuler la fonctionnalité de base de données pour n’importe lequel de vos objets métier.

Dans l’exemple de code ci-dessus, vous pouvez constater que tout tourne autour de la propriété Items. Celle-ci contient tous les éléments dans la « base de données » et est la cible de toutes les requêtes LINQ. La méthode Save() prend une instance d’un objet métier et regarde si la propriété Id a la valeur 0 ou non. Si la valeur est 0, le
Repository de substitution simule une instruction INSERT en incrémentant la variable m_currentIdValue et en définissant la valeur sur la propriété Id de l’objet. Une fois la valeur d’identité définie, la méthode Save() ajoute l’objet à la collection Items.

La méthode GetById() utilise la propriété Id sur l’interface IInt32Id et émet une requête LINQ sur la collection Items afin de trouver le premier objet avec la valeur Id. Pour créer la fonctionnalité de test unitaire UsernameExists(), vous devez implémenter la méthode GetByUser Name() définie sur IUser Repository. Pour cela, vous créez simplement une classe intitulée In MemoryUserReposi tory et étendez celle-ci à partir de Repository Mock. A partir de là, vous écrivez une requête LINQ qui recherche les utilisateurs correspondants dans la collection Items via UserName.

Avec cette implémentation en mémoire, vous ne vous souciez plus de savoir si la base de données est opérationnelle, si elle contient d’anciennes données et si elle comporte des contraintes de clé étrangère. La configuration pour le test UsernameExists() revient à ajouter simplement des instances
de User à la collection Items via des appels à Save(). Voici la logique de configuration pour le test Username Exists().

Téléchargez cette ressource

Guide de Reporting Microsoft 365 & Microsoft Exchange

Guide de Reporting Microsoft 365 & Microsoft Exchange

Comment bénéficier d’une vision unifiée de vos messageries, mieux protéger vos données sensibles, vous conformer plus aisément aux contraintes réglementaires et réduire votre empreinte carbone ? Découvrez la solution de reporting complet de l’utilisation de Microsoft Exchange, en mode on-premise ou dans le Cloud.

Tech - Par Renaud ROSSET - Publié le 30 novembre 2010