Un exemple de projet .NET Core avec une base de données MongoDB avec un jeu de réplicas et des transactions activées.
Le but de ce projet est de donner une solution au sujet ci-dessous (utilisé pour un entretien d'embauche) :
Please create a sample .net/C# project that includes the following elements:
- Basic CRUD functionality for a data structure of your choice.
- RESTful APIs to expose that functionality with your framework of choice (ASP.NET Web APIs, ASP.NET Core, ServiceStack (preferred), …etc).
- Uses MongoDB using C# driver.
- Please demonstrate your usage of one of MongoDB advanced features (aggregation, transactions, indexes, …etc) using C# driver.
- Please push your code to a Git repository that you can share with us.
Il s'agit d'un projet d'API Web asp core 3.1 avec une architecture à n niveaux :
Chaque couche possède sa propre couche d'abstraction afin d'éviter les dépendances. J'utilise le moteur IOC et DI de base .net.
Je n'ai fait aucun test unitaire car il n'y a pas de logique métier. Cependant, j'ai réalisé un exemple de test d'intégration à l'aide de la bibliothèque Microsoft WebHost . Vous pouvez exécuter les tests d'intégration via Visual Studio ou la ligne de commande, mais n'oubliez pas d'exécuter d'abord docker-compose (sinon vous n'aurez aucune base de données à demander).
L'implémentation du DAL utilise le pilote MongoDB C#. En exécutant le docker-compose attaché à la solution, vous obtiendrez une instance d'un serveur Mongo avec un jeu de réplicas activé (afin de prendre en charge les transactions).
Pour démontrer l'utilisation de l'une des fonctionnalités avancées de MongoDB, j'ai choisi les transactions. Ainsi, le IClientSessionHandle est injecté dans tous les référentiels. J'ai également réussi à créer un middleware appelé TransactionFilter qui crée une transaction pour l'ensemble de la requête HTTP. De cette façon, nous pouvons effectuer des opérations multi-documents, sur différents référentiels, qui peuvent être annulées en cas de problème, sans traiter manuellement les transactions multi-documents.
Exemple :
Cela fonctionne tel quel, mais cela nécessiterait des tests de charge supplémentaires. Ce n’est peut-être pas prêt pour la production.
L'utilisation de docker-compose up en ligne de commande ne semble pas fonctionner avec l'API pour le moment. Il ne me restait plus beaucoup de temps, alors j'ai continué à utiliser VS pour composer.