Top 50+ NuGet packages для .NET разработчика
![Top 50+ NuGet packages для .NET разработчика](https://joprblob.azureedge.net/site/blog/d3504bbb-7f2e-43d7-897f-1e36485615be/e2f196e7-2fb7-47b1-ae04-dbb2bda41ce3.webp)
В этой статье собрали лучшие nuget пакеты для .NET разработки, которые смогут вам пригодится в повседневной разработке
Mapping
![Mapping](https://joprblob.azureedge.net/site/blog/d3504bbb-7f2e-43d7-897f-1e36485615be/dd3dce6a-7d15-44b6-be87-9e82957d5704.webp)
Для инкапсуляции домена, мы часто юзаем DTO для наших объектов и маппить все проперти entity вручную так себе идея, для этого существуют библиотеки, которые делают это за вас, рассмотрим самые популярные из них:
⭐Riok.Mapperly
Поскольку Mapperly создает код сопоставления во время сборки, во время выполнения накладные расходы минимальны. Следовательно - это довольно производительная либа.
- Mapperly не использует reflection
- Mapperly безопасен для обрезки и AoT
- Mapperly запускается во время сборки
- Mapperly не имеет зависимостей во время выполнения
- Генерируемые маппинги быстры с минимальными затратами памяти
- Сгенерированный код маппинга читаем и отлаживаем
- Нет необходимости писать и поддерживать boilerplate вручную
- Mapperly является подключаемым: всегда можно реализовать маппинги для определенных типов вручную, которые будут подхвачены Mapperly
Пример как это работает, можно подсмотреть в их документации.
⭐Mapster
- Простота использования, высокая скорость и низкое потребление памяти.
- Для использования Mapster нам не нужно создавать какую-либо предварительную конфигурацию. Он работает через методы расширения, поэтому маппить entity на новый экземпляр другого класса очень просто.
AutoMapper
Самая популярная либа, но не самый производительный варик для маппинга
Logging
![Logging](https://joprblob.azureedge.net/site/blog/d3504bbb-7f2e-43d7-897f-1e36485615be/49e50624-fc85-4867-a188-9b5c312e673e.webp)
Куда ж без логов, вот несколько самых популярных библиотек .NET для логирования
⭐Serilog
Позволяет писать structrured log by default. В остальном тоже ничем не уступает аналогам.
Пример как работает лог:
var position = new { Latitude = 25, Longitude = 134 };
var elapsedMs = 34;
log.Information("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);
В результате получаем что-то типа
:14:22 [Information] Processed { Latitude: 25, Longitude: 134 } in 034 ms.
Можно писать логи в:
- Консоль
- Файл
- БД
- GrayLog
и многое другое.
NLog
NLog предлагает систему конфигурации, позволяющую детально настраивать логирование. Оптимизирован для высокой производительности и низкого потребления ресурсов.
log4net
log4net - проверенное временем решение, которое используется во многих проектах. Поддерживает конфигурацию через файлы конфигурации, так и программно.
Разработка log4net не так активна, как у некоторых других библиотек для логов.
Microsoft.Extensions.Logging
Плотно интегрирована с .NET Core и ASP.NET Core, что обеспечивает легкую настройку и использование. Позволяет легко переключаться между различными провайдерами логирования без изменения кода приложения.
Меньше функциональности по сравнению со специализированными библиотеками: Как абстракция, может не предоставлять некоторые продвинутые возможности, доступные в таких библиотеках, как NLog или log4net.
RDBMS и ORM'ки
![RDBMS и ORM'ки](https://joprblob.azureedge.net/site/blog/d3504bbb-7f2e-43d7-897f-1e36485615be/45ec1e84-4a7f-4d71-acd8-ecc29789d552.webp)
Для работы с реалиционными БД есть много разных либ, конечно же самые популярные это ORM EF и Dapper. DbUp довольно мощная тула для миграции БД.
⭐Entity Framework Core
Это ORM фреймворк от Microsoft, предназначенный для работы с базами данных в .NET приложениях. Он позволяет разработчикам работать с данными через объекты .NET, минимизируя необходимость написания SQL кода. Entity Framework Core поддерживает миграции баз данных, ленивую загрузку и автоматическое отслеживание изменений в объектах, что упрощает разработку.
⭐Dapper
Dapper — легковесный ORM фреймворк, который предоставляет минимальную абстракцию над SQL. Он разработан командой StackOverflow и ориентирован на производительность и простоту. Dapper позволяет напрямую работать с SQL запросами, обеспечивая высокую скорость выполнения за счет отказа от сложных функций, таких как автоматическое отслеживание изменений или ленивая загрузка, доступных в более тяжеловесных ORM, таких, как EF.
⭐DbUp
DbUp - набор библиотек .NET, которые помогают развертывать изменения в различных базах данных, таких как SQL Server. Он отслеживает, какие SQL миграции уже были запущены, и запускает те, которые необходимы для обновления базы данных. По сути, работает по принципу миграции в EF, но если вы юзаете Dapper или вовсе без ORM, то DbUp будет полезным.
NoSQL
![NoSQL](https://joprblob.azureedge.net/site/blog/d3504bbb-7f2e-43d7-897f-1e36485615be/e6e8d7b0-1c57-45c9-ae1d-18140462179e.webp)
Куда ж без NoSQL, вот самые популярные NoSQL решения и nuget пакеты для них:
MongoDB Driver
Либы для работы с MongoDB из .NET приложений. Подробнее документацию можно посмотреть на официальном сайте.
AWS DynamoDB
Этот пакет предоставляет удобный доступ к DynamoDB, позволяя эффективно работать с данными в этой NoSQL базе данных, включая операции создания, чтения, обновления и удаления данных, а также поддержку различных моделей данных.
RavenDB Client
RavenDB Client — библиотека для взаимодействия с RavenDB, NoSQL базой данных.
Azure Cosmos DB
Либа для работы с CosmosDB от Azure
Marten
Marten — библиотека для .NET, которая позволяет использовать PostgreSQL как документо-ориентированную базу данных. Она предлагает легкую работу с документами JSON прямо в PostgreSQL, обеспечивая возможности такие как LINQ-запросы, полнотекстовый поиск и версионирование документов.
HTTP
![HTTP](https://joprblob.azureedge.net/site/blog/d3504bbb-7f2e-43d7-897f-1e36485615be/24db2464-475a-417b-b75b-67d6aff2b775.webp)
Довольно часто приходится общаться с внешними API, эти библиотеки помогут вам в этом
⭐Polly
Polly — библиотека для .NET, предназначенная для обработки повторных попыток, Circuit Breaker и других стратегий устойчивости к сбоям. Она позволяет разработчикам легко настраивать политики для повторных попыток, тайм-аутов, обработки исключений и многого другого, что делает приложения более надежными при возникновении ошибок во внешних вызовах или временных сбоях.
⭐RestSharp
RestSharp — это простой и гибкий HTTP-клиент для .NET, который облегчает взаимодействие с RESTful API. Поддерживает асинхронные вызовы и автоматическую десериализацию ответов
Refit
Refit — библиотека REST клиента для .NET, которая превращает ваш HTTP API в живой .NET интерфейс. Вместо ручного создания HttpClient вызовов, Refit позволяет определить интерфейс с методами и аннотациями, соответствующими вашему API. Это упрощает код, делая его более читаемым и лаконичным.
Встроенная HttpFactory
Валидации
![Валидации](https://joprblob.azureedge.net/site/blog/d3504bbb-7f2e-43d7-897f-1e36485615be/bb87038e-26ac-4da2-bf2a-5035757c51e8.webp)
Ни 1 .NET проект не обходится без валидации данных на стороне сервера, ниже рассмотрим популярные либы для этого:
⭐FluentValidation
FluentValidation — библиотека для .NET, предназначенная для создания мощных валидационных правил с использованием легко читаемого, почти естественного языка. Она позволяет разработчикам определять правила валидации в отдельных классах валидаторов, к примеру:
using FluentValidation;
public class CustomerValidator: AbstractValidator<Customer> {
public CustomerValidator() {
RuleFor(x => x.Surname).NotEmpty();
RuleFor(x => x.Forename).NotEmpty().WithMessage("Please specify a first name");
RuleFor(x => x.Discount).NotEqual(0).When(x => x.HasDiscount);
RuleFor(x => x.Address).Length(20, 250);
RuleFor(x => x.Postcode).Must(BeAValidPostcode).WithMessage("Please specify a valid postcode");
}
private bool BeAValidPostcode(string postcode) {
// custom postcode validating logic goes here
}
}
var customer = new Customer();
var validator = new CustomerValidator();
// Execute the validator
ValidationResult results = validator.Validate(customer);
// Inspect any validation failures.
bool success = results.IsValid;
List<ValidationFailure> failures = results.Errors;
DataAnnotations
DataAnnotations — это атрибуты, встроенные в .NET, которые можно применять непосредственно к классам или свойствам для указания правил валидации, метаданных или других инструкций, используемых фреймворками, такими как Entity Framework и ASP.NET MVC. DataAnnotations обеспечивают простой способ включения базовой валидации и метаданных непосредственно в модели данных вашего приложения. Хотя они менее гибкие по сравнению с FluentValidation, DataAnnotations предлагают простой и быстрый способ добавления валидации без необходимости создания отдельных классов валидаторов.
Auth
![Auth](https://joprblob.azureedge.net/site/blog/d3504bbb-7f2e-43d7-897f-1e36485615be/96ca472f-e30d-4055-85e7-d5225261f69b.webp)
⭐Microsoft.Identity
Microsoft.Identity включает в себя библиотеки, такие как Microsoft.Identity.Client (MSAL) и Microsoft.AspNetCore.Identity, предназначенные для управления пользователями, аутентификации и авторизации в .NET приложениях. MSAL упрощает интеграцию с Microsoft Identity Platform (включая Azure AD и Microsoft accounts), обеспечивая доступ к токенам безопасности для вызова защищенных API. AspNetCore.Identity предлагает API для управления пользователями, паролями, профилями, ролями и т.д. в веб-приложениях.
![Сценарии использования Microsoft Identity platrorm](https://joprblob.azureedge.net/site/blog/d3504bbb-7f2e-43d7-897f-1e36485615be/34cb94f7-0a25-4d12-9bcb-86ac41ab51d1.png)
Так же с .NET 8 набирает популярность подход с Identity Endpoints.
Identity Server / Duende Identity Server
![Identity Server / Duende Identity Server](https://joprblob.azureedge.net/site/blog/d3504bbb-7f2e-43d7-897f-1e36485615be/97d3036e-325e-4b42-836d-d4a6c3b514d8.png)
Identity Server (ныне известный как Duende Identity Server после коммерциализации) — это фреймворк OpenID Connect и OAuth 2.0 для ASP.NET Core, который позволяет реализовать собственный сервер аутентификации и авторизации. Это решение широко используется для создания систем безопасности и идентификации, поддерживающих современные стандарты и обеспечивающих защиту API.
И много других библиотек в зависимости от ваших нужд...
Для более комплексных кейсов стоит рассмотреть готовые решения такие как:
Тестирование
![Тестирование](https://joprblob.azureedge.net/site/blog/d3504bbb-7f2e-43d7-897f-1e36485615be/3cffb306-be91-40f7-95ad-db71c64a8fad.webp)
⭐NUnit
Популярный фреймворк для модульного тестирования в .NET, поддерживающий много функций для создания комплексных тестовых сценариев.
⭐xUnit
Еще один современный фреймворк для модульного тестирования, разработанный с учетом новых возможностей .NET. Он предлагает улучшенную модель тестирования по сравнению с NUnit и MSTest, включая поддержку параллельного выполнения тестов и уникальную систему фикстур.
⭐FluentAssertions
Предоставляет набор методов расширения который улучшает читаемость кода и упрощает работу с Assets.
FakeItEasy
Библиотека для создания фейков (заглушек и моков) в .NET, позволяющая легко подменять зависимости в тестируемом коде. Она предлагает простой и интуитивно понятный API для настройки поведения фейков.
Bogus
Либа для генерации фиктивных данных в .NET. Она позволяет легко создавать тестовые данные для модульных тестов, заглушек или демонстрационных приложений, поддерживая широкий спектр типов данных.
WireMock.Net
Предоставляет возможность имитации HTTP-серверов для тестирования взаимодействия с веб сервисами. Это полезно для тестирования клиентского кода без необходимости обращения к реальным веб сервисам, что ускоряет тестирование и делает его более надежным.
Moq
Библиотека для в .NET, которая позволяет создавать моки для интерфейсов и классов.
NSubstitute
Библиотека для создания моков и заглушек с простым API, ориентированная на удобство и простоту использования. Она позволяет настраивать возвращаемые значения и проверять вызовы методов без необходимости написания большого количества шаблонного кода.
AutoFixture
Библиотека, которая автоматизирует настройку тестовых данных для модульных тестов, создавая объекты с заполненными данными автоматически. Это снижает количество необходимого ручного кода и упрощает подготовку данных для тестов.
⭐SpecFlow.NUnit
SpecFlow.NUnit интегрирует фреймворк BDD (Behavior-Driven Development) SpecFlow с NUnit, позволяя разработчикам определять тесты через спецификации на естественном языке.
Task Schedulers
![Task Schedulers](https://joprblob.azureedge.net/site/blog/d3504bbb-7f2e-43d7-897f-1e36485615be/bed44125-0fb2-4265-beca-5740e232a703.webp)
⭐Quartz.NET
Quartz.NET — это полнофункциональный планировщик задач для .NET приложений, который позволяет разработчикам запускать задачи по расписанию. Он поддерживает простые и сложные сценарии планирования, включая возможность использования CRON-выражений. Quartz.NET может быть использован для добавления сложных планировщиков задач в любое .NET приложение.
⭐Hangfire
Hangfire — это фреймворк для фонового выполнения задач в .NET приложениях, который позволяет планировать и выполнять задачи асинхронно на фоне. Он предлагает удобный дашборд для мониторинга и управления фоновыми задачами, поддерживает персистентность задач и не требует отдельного сервиса для управления очередями задач.
FluentScheduler
FluentScheduler — это библиотека для автоматизации задач в .NET, которая позволяет легко планировать выполнение задач с использованием флюент API. Она поддерживает одноразовые и повторяющиеся задачи, а также предоставляет возможность организации задач в группы для удобства управления.
NCrontab
Библиотека, предоставляющая парсер и форматтер для CRON-выражений в .NET. Хотя сама по себе не является планировщиком задач, она может быть использована в сочетании с другими инструментами для расширения возможностей планирования задач с использованием стандартного CRON-формата.
Messaging
![Messaging](https://joprblob.azureedge.net/site/blog/d3504bbb-7f2e-43d7-897f-1e36485615be/08642186-84ad-409a-b9f3-518cbe6676f7.webp)
RabbitMQ.Client
Библиотека для работы с RabbitMQ
Kafka
Библиотека для работы с Kafka
Confluent.Kafka
Confluent.Kafka это .NET клиент для Apache Kafka, разработанный Confluent. Эта библиотека предоставляет производительный и удобный API для паблиша и получения сообщений из Kafka. Confluent.Kafka тесно интегрирована с Kafka и поддерживает все основные возможности Kafka, включая транзакции, потоковую обработку и управление схемами через Confluent Schema Registry,
MassTransit
это легковесная библиотека для .NET, облегчающая работу с брокерами сообщений, такими как RabbitMQ и Kafka. Она предоставляет высокоуровневый API для асинхронного взаимодействия между компонентами приложения через сообщения. MassTransit упрощает реализацию сложных шаблонов обмена сообщениями и обеспечивает интеграцию с системами контроля версий сообщений, компенсационными транзакциями и мониторингом.
Кеширование
![Кеширование](https://joprblob.azureedge.net/site/blog/d3504bbb-7f2e-43d7-897f-1e36485615be/c692a336-d4dd-44a5-a1df-f0eb13308cce.jpg)
⭐ZiggyCreatures.FusionCache
Довольно мощьная либа, поддерживает как inmemory так и distributed кэш. Моя персональная рекомендация.
Microsoft.Extensions.Caching
Microsoft.Extensions.Caching включает в себя две основные реализации кэша: MemoryCache для кэширования в памяти и DistributedCache для распределенного кэширования.
Другое
⭐MediatR
Библиотека, реализующая шаблон "Посредник", который помогает уменьшить прямую зависимость между компонентами программы, облегчая тем самым их тестирование и поддержку.
⭐Newtonsoft.Json
Популярная библиотека для работы с Json.
⭐System.Text.Json
Альтернатива Newtonsoft.Json для работы с Json от Microsoft.
GraphQL
Библиотека для работы с GraphQL.
Пишите в комментах, чего не хватает и что еще следует добавить