Пример проекта .NET Core с базой данных MongoDB с включенным набором реплик и транзакциями.
Цель этого проекта — дать решение приведенной ниже темы (используется для собеседования):
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.
Это проект веб-API asp core 3.1 с многоуровневой архитектурой:
Каждый уровень имеет свой собственный уровень абстракции, чтобы избежать зависимостей. Я использую стандартный .net-ядро IOC и DI-движок.
Я не делал никаких модульных тестов , потому что там нет бизнес-логики. Однако я сделал образец интеграционного теста с использованием библиотеки Microsoft WebHost . Вы можете запустить интеграционные тесты через Visual Studio или командную строку, но не забудьте сначала запустить docker-compose (иначе у вас не будет базы данных для запроса).
Реализация DAL использует драйвер MongoDB C#. Запустив docker-compose, прикрепленный к решению, вы получите экземпляр сервера Mongo с включенным набором реплик (для поддержки транзакций).
В качестве демонстрации использования одной из расширенных функций MongoDB я выбрал транзакции. Таким образом, IClientSessionHandle внедряется во все репозитории. Мне также удалось создать промежуточное программное обеспечение под названием TransactionFilter , которое создает транзакцию для всего HTTP-запроса. Таким образом, мы можем выполнять операции с несколькими документами в разных репозиториях, которые могут быть отменены в случае возникновения проблемы, без обработки транзакций с несколькими документами вручную.
Пример :
Он работает как есть, но потребуется дополнительное нагрузочное тестирование. Возможно, это не готово к производству.
Использование docker-compose up в командной строке на данный момент не работает с API. У меня оставалось мало времени, поэтому я просто продолжал использовать VS для сочинения.