Применяемые технологии
1. Стек для легаси продуктов
1.1 Backend
Языки и платформы
| Технология |
Версия |
Статус |
Обоснование |
| C# |
- |
✅ Поддерживать |
Версия языка определяется используемой версией .NET |
| .NET Framework |
4.8 |
✅ Поддерживать |
Финальная версия платформы с поддержкой до 2028 года |
Обоснование: для легаси продуктов приоритетом является стабильность и минимизация рисков изменений. .NET Framework 4.8 является финальной версией платформы и будет поддерживаться Microsoft до 2028 года.
Базы данных
| Технология |
Статус |
Обоснование |
| MS SQL Server |
⚠️ Мигрировать постепенно |
Используется в легаси, при плановом рефакторинге рекомендуется переход на PostgreSQL |
| PostgreSQL |
✅ Поддерживать |
Универсальная production-ready СУБД с активным развитием и широкой поддержкой |
| SQL Compact |
❗ Мигрировать |
Устаревшая БД, ограниченная функциональность и сильная зависимость от Windows |
| SQLite |
✅ Поддерживать |
Легковесная встраиваемая БД для локального хранения данных |
Обоснование: PostgreSQL рекомендуется как целевая платформа для новых и модернизируемых компонентов. SQL Compact признана устаревшей и требует поэтапной миграции без полного переписывания системы.
ORM и работа с БД
| Библиотека |
Версия |
Статус |
Обоснование |
| Entity Framework |
- |
✅ Поддерживать |
Используется в проектах на .NET Framework, версия определяется поддерживаемой платформой |
| ADO.NET |
- |
⚠️ Мигрировать постепенно |
Прямая работа с БД в легаси системах без изменения архитектуры |
Обоснование: для легаси-систем допускается постепенный отказ от прямого использования ADO.NET в пользу Entity Framework. ADO.NET остается допустимым для сложных SQL-сценариев, bulk-операций и модулей без планового рефакторинга. Полный отказ от ADO.NET не является целью; приоритетом является повышение поддерживаемости кода без увеличения рисков и с сохранением возможности повторного использования наработок при дальнейшей модернизации системы.
Логирование
| Библиотека |
Статус |
Обоснование |
| Serilog |
✅ Поддерживать |
Современная библиотека, поддерживает структурированные логи, гибкие sinks, интеграцию с облачными и аналитическими системами (ELK, Seq, Splunk) |
| NLog |
⚠️ Мигрировать постепенно |
Рабочее решение для легаси, поддерживает различные targets, но уступает Serilog по структурированности и интеграции с современными системами |
| log4net |
❗ Мигрировать |
Устаревшая библиотека, сложно работать с разными типами вывода, не поддерживает современные аналитические стеки (например ELK), рекомендуется мигрировать на Serilog |
Обоснование: Для новых модулей и постепенной миграции рекомендуется Serilog — она обеспечивает структурированные логи, гибкие sinks, поддержку облачных и аналитических систем и упрощает централизованное логирование. Это повышает поддерживаемость и интеграцию кода, при этом не требует срочной полной переписки существующего логирования.
Сериализация
| Библиотека |
Статус |
Обоснование |
| Newtonsoft.Json |
✅ Поддерживать |
Замена не критична |
| Google.Protobuf |
✅ Поддерживать |
Эффективная бинарная сериализация |
Обоснование: Для легаси-систем Newtonsoft.Json остаётся стандартом сериализации. Замена на System.Text.Json не требуется, если нет критичных требований к производительности.
Протоколы и коммуникации
| Библиотека |
Статус |
Обоснование |
| M2Mqtt |
⚠️ Рассмотреть обновление |
Устаревающая библиотека MQTT, рекомендуется плановая замена на MQTTnet при модернизации системы |
| SSH.NET |
✅ Поддерживать |
Стабильная библиотека для работы по SSH, безопасно использовать в легаси |
| FluentFTP |
✅ Поддерживать |
Активно поддерживается, надежная реализация FTP |
| EGTS |
✅ Поддерживать |
Специфичный протокол для ГЛОНАСС, поддержка критична для существующих модулей |
Обоснование: M2Mqtt устаревает и имеет ограниченное развитие, поэтому для новых модулей или при рефакторинге рекомендуется использовать MQTTnet. Для существующих легаси систем текущая библиотека работает стабильно, срочной замены не требуется. Остальные протоколы остаются актуальными и безопасными для использования.
2. Стек для новых продуктов
2.1 Backend
Языки и платформы
| Технология |
Версия |
Обоснование |
| .NET |
10 (LTS) |
LTS-версия с долгосрочной поддержкой (до 14.10.2028), оптимальна для новых production-проектов |
| C# |
Актуальная (в составе .NET 10) |
Синхронизирована с платформой, новые конструкции упрощают код |
| ASP.NET Core |
10.x |
Высокопроизводительный веб-фреймворк, стандарт для backend на .NET |
Обоснование: .NET 10 и C# 14 обеспечивают улучшенную производительность, кроссплатформенность, новые языковые конструкции, расширенные стандартные библиотеки и интеграцию с облаком и микросервисами. Долгосрочная поддержка снижает риски техдолга.
Базы данных
| Технология |
Обоснование |
| PostgreSQL |
Универсальное решение |
| SQLite |
Лёгкая встроенная БД для локальных решений |
ORM и работа с БД
| Библиотека |
Версия |
Обоснование |
| Entity Framework Core |
Актуальная версия для используемой .NET платформы |
Поддерживает последние возможности ORM, высокую производительность и совместимость с актуальными инструментами |
Логирование
| Библиотека |
Версия |
Обоснование |
| Serilog |
Актуальная версия для .NET 10 |
Современное структурированное логирование, лёгкая интеграция с облачными и аналитическими системами (ELK, Seq, Splunk), поддержка централизованного логирования |
Обоснование: Serilog — стандарт для новых .NET проектов. Поддерживает структурированные логи, гибкие sinks и интеграцию с системами мониторинга, повышая удобство эксплуатации и поддерживаемость кода.
Сериализация
| Библиотека |
Обоснование |
| System.Text.Json |
Встроенная в .NET, высокая производительность |
| MemoryPack |
Для высокопроизводительной бинарной сериализации, оптимально при рефакторинге корпоративного протокола RITM |
| Google.Protobuf |
Эффективная бинарная сериализация, только по согласованию |
Обоснование: Для новых проектов рекомендуется использовать System.Text.Json как стандартную библиотеку сериализации: она встроена в .NET, быстрее Newtonsoft.Json, поддерживает современные конструкции Span/Memory и структурированные JSON-схемы. MemoryPack подходит для высокопроизводительных бинарных сценариев, в том числе при переходе с RITM.
Протоколы и коммуникации
| Библиотека |
Обоснование |
| MQTTnet |
Современный MQTT клиент (вместо M2Mqtt) |
| SignalR |
Real-time коммуникация |
| NModbus |
Протокол Modbus) |
Архитектурные паттерны и инструменты
| Библиотека |
Обоснование |
| MediatR |
Реализация паттерна Mediator для разделения команд и запросов |
| ❓ TODO |
Рассмотреть переход в сторону бесплатного и поддерживаемого решения |
Валидация
| Библиотека |
Обоснование |
| FluentValidation |
Fluent API для проверки сложных условий, повышает читаемость и поддерживаемость кода |
| ❓ TODO |
Рассмотреть библиотеки для реализации Result паттерна |
Маппинг / DTO
| Библиотека |
Обоснование |
| AutoMapper |
Автоматический маппинг объектов, уменьшает ручной код при трансформации DTO и моделей |
| ❓ Mapster |
Быстрая и лёгкая альтернатива AutoMapper с source generators и меньшей конфигурацией |
❓ TODO: проверить Mapster, подходит ли для проектов, протестировать source generators и сложные сценарии маппинга
Устойчивость / Политики
| Библиотека |
Обоснование |
| Polly |
Реализация retry, circuit breaker и других политик устойчивости |
DI / Инъекция зависимостей
| Библиотека |
Обоснование |
| Microsoft.Extensions.DependencyInjection |
Стандартный контейнер DI для .NET |
| Scrutor |
Расширение для автоматической регистрации сервисов по соглашению, удобно для модульных проектов |
Хостинг и фоновые задачи
| Библиотека / Инструмент |
Обоснование |
| Microsoft.Extensions.Hosting |
Управление жизненным циклом приложений, интеграция с DI и background-сервисами |
| IHostedService / BackgroundService |
Простые фоновые задачи внутри приложения, периодичность через Timer/Task.Delay |
| Quartz.Extensions.Hosting |
Планировщик с гибким расписанием и поддержкой критичных задач |
Обоснование использования:
- IHostedService / BackgroundService — для простых фоновых задач, связанных с приложением.
- Quartz — для сложного расписания, устойчивости и управления job-ами.
Геопространственные данные
| Библиотека |
Обоснование |
| GMap.NET.Core |
Работа с картами и геоданными |
| GeoJSON.Net |
Работа с форматом GeoJSON |
| DotSpatial.Projections |
Работа с пространственными проекциями |
| NetTopologySuite |
Работа с геометрией и пространственными данными |
Тестирование
| Библиотека |
Обоснование |
| xUnit |
Фреймворк для unit-тестов |
| Moq |
Создание моков для зависимостей |
| AutoFixture.Xunit |
Генерация тестовых данных |
| MockQueryable.Moq |
Моки для IQueryable |
Заключение
- Для легаси систем главное — стабильность, постепенная миграция и сохранение существующих наработок.
- Для новых проектов — использовать современные, поддерживаемые технологии.
No comments to display
No comments to display