Ein Beispiel für ein .NET Core-Projekt mit einer MongoDB-Datenbank mit aktiviertem Replikatset und aktivierten Transaktionen.
Das Ziel dieses Projekts ist es, eine Lösung für das folgende Thema zu finden (das für ein Vorstellungsgespräch verwendet wird):
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.
Dies ist ein Asp Core 3.1-Web-API-Projekt mit einer n-Tier-Architektur:
Jede Schicht verfügt über eine eigene Abstraktionsschicht, um Abhängigkeiten zu vermeiden. Ich verwende die Standard-IOC- und DI-Engine des .net-Kerns.
Ich habe keine Unit-Tests durchgeführt, da es keine Geschäftslogik gibt. Ich habe jedoch ein Beispiel eines Integrationstests mit der Microsoft WebHost-Bibliothek erstellt. Sie können die Integrationstests über Visual Studio oder über die Befehlszeile ausführen. Vergessen Sie jedoch nicht, zuerst Docker-Compose auszuführen (sonst haben Sie keine Datenbank zum Anfordern).
Die Implementierung der DAL erfolgt über den MongoDB C#-Treiber. Durch Ausführen des an die Lösung angehängten Docker-Compose erhalten Sie eine Instanz eines Mongo-Servers mit aktiviertem Replikatsatz (zur Unterstützung von Transaktionen).
Als Demonstration der Nutzung einer der erweiterten Funktionen von MongoDB habe ich Transaktionen ausgewählt. Daher wird das IClientSessionHandle in alle Repositorys eingefügt. Ich habe es auch geschafft, eine Middleware namens TransactionFilter zu erstellen, die eine Transaktion für die gesamte HTTP-Anfrage erstellt. Auf diese Weise können wir Vorgänge mit mehreren Dokumenten in verschiedenen Repositorys durchführen, die bei Auftreten eines Problems möglicherweise zurückgesetzt werden, ohne Transaktionen mit mehreren Dokumenten manuell bearbeiten zu müssen.
Beispiel :
Es funktioniert so wie es ist, aber es wären noch weitere Belastungstests erforderlich. Dies ist möglicherweise noch nicht produktionsbereit.
Die Verwendung von docker-compose up in der Befehlszeile scheint derzeit mit der API nicht zu funktionieren. Ich hatte nicht mehr viel Zeit, also habe ich einfach weiterhin VS zum Komponieren verwendet.