IT-специалистам
IT-рекрутерам
IT-специалистам
IT-рекрутерам
Кейсы

Разработка на C#/.NET для госсектора: CI/CD и контроль качества

В городских ИТ-системах редко встречаются задачи, когда нужно «переписать все с нуля в сжатые сроки». Чаще необходимо параллельно развивать функциональность, держать совместимость с различными модулями, ускорять узкие места и подтягивать качество кода до уровня, на котором проект можно спокойно масштабировать и сопровождать.
К аутстаффинговой компании iStaff-it обратились сотрудники городского Департамента информационных технологий, чтобы мы подключили к их задачам специалиста C#/.NET. Наш эксперт аккуратно встроился в Scrum-процесс, взяв на себя развитие модулей, рефакторинг и инженерную инфраструктуру.

Контекст и задачи проекта

Проект развивался итеративно: параллельно шли доработки бизнес-логики и «оздоровление» существующей кодовой базы. Важное требование — внедрить .NET 8 во всех модулях, не сломав контракты и сценарии взаимодействия между сервисами, и при этом улучшить предсказуемость производительности.
Фокус был на практичных вещах: договориться об архитектурных правилах, разделить зоны ответственности по слоям, сократить технический долг и собрать конвейер, в котором качество проверяется автоматически — до деплоя.
Что было закрыто по работам:
  • разработка новых модулей и рефакторинг существующих;
  • внедрение .NET 8 во всех модулях и выравнивание зависимостей;
  • оптимизация производительности через ADO.NET и Dapper;
  • архитектура на Clean Architecture + Repository/UnitOfWork;
  • GitLab CI/CD — автотесты, сборка, деплой;
  • SonarQube — качество, code smells, уязвимости, coverage-гейты;
  • внутренние библиотеки для Kafka и ClickHouse;
  • SOAP-сервисы для взаимодействия с банковскими системами;
  • архитектурный надзор и планирование Scrum-активностей.
После фиксации задач команда работала итерациями: часть работ шла в feature-ветках, часть — отдельными техническими эпиками (миграция на .NET 8, перформанс, инфраструктура качества).

Архитектура и стек

Чтобы изменения не «расползались» по проекту, архитектуру выстраивали вокруг принципов Clean Architecture: изолировали доменную модель, доступ к данным вынесли за интерфейсы, интеграции оформили через адаптеры. Это упростило рефакторинг и позволило подключать модули без правок в ядре.
Отдельно договорились о правилах зависимостей и границах модулей: где допускаются shared-компоненты, какие пакеты считаем «core», а какие — инфраструктурой, и что проверяется линтерами или анализаторами на CI.
Ключевые технологии:
  • C# / .NET 8;
  • Clean Architecture;
  • Repository / UnitOfWork;
  • ADO.NET, Dapper;
  • Kafka, ClickHouse;
  • SOAP (XML-контракты, обработка ошибок);
  • GitLab CI/CD;
  • SonarQube.
Каркас, построенный с помощью аутстафф-разработки, помог совместить две реальности. Заказчику нужно было развивать функциональность, а инженерной команде — держать систему управляемой и тестируемой.

.NET 8 — внедрение и рефакторинг модулей

Переход на .NET 8 — это не только смена Target Framework. Важно выровнять зависимости, убедиться, что библиотеки совместимы, и не получить сюрпризы в рантайме на стыках модулей. Поэтому миграцию делали поэтапно — от инвентаризации проектов и NuGet-пакетов до регресса ключевых сценариев.
Параллельно с апгрейдом шел рефакторинг. Наш специалист упрощал сложные участки, резал сервисы, выносил повторяющиеся куски в доменные сервисы и приводил исключения к единому формату.
Как организовали миграцию:
  • аудит модулей: версии пакетов, совместимость, критичные зависимости;
  • обновление csproj и базовых библиотек, фиксация различных правил сборки;
  • правки по возникающим предупреждениям компилятора и анализаторам;
  • прогон автоматизированных тестов + выборочный регресс критичных сценариев;
  • поэтапный выпуск, чтобы не копить «большой взрыв» в одном релизе.
В результате переход на .NET 8 превратился в контролируемый процесс: с понятными чек-листами и предсказуемым влиянием на соседние модули.

Производительность — ADO.NET и Dapper

Часть сервисов упиралась в скорость работы с данными и накладные расходы. Для таких участков применили более «прямой» доступ к БД: ADO.NET и Dapper. Цель была прагматичной: сократить аллокации, уменьшить время маппинга и сделать поведение запросов более прозрачным.
Параллельно приводили к порядку транзакционность и работу с соединениями: где нужен explicit transaction, где достаточно read-only, как управлять таймаутами, чтобы не провоцировать лавину повторов при деградациях.

Что наш эксперт оптимизировал точечно:

  • горячие запросы и сценарии с высокой частотой чтения;
  • батч-операции и массовые вставки/обновления;
  • маппинг DTO без лишних преобразований;
  • контроль таймаутов и явное управление транзакциями;
  • повторное использование соединений там, где это безопасно.
Такой подход принес множество «быстрых побед» без переписывания всей системы. Под ускорение попал только тот список IT-услуг, где это действительно влияло на нагрузку и время ответа.

Интеграции — Kafka, ClickHouse и SOAP

Для событийного обмена и потоковой обработки понадобились внутренние библиотеки под Kafka. С единым способом публикации и чтения сообщений, а также стандартизацией заголовков, ключей, сериализации и обработки ошибок. Это снизило количество реализаций и упростило сопровождение интеграций между командами.
Под ClickHouse закрывали задачи аналитического чтения и выборок. Важно было не просто «подключиться», а договориться о подходах к запросам, формированию батчей и обработке больших объемов, чтобы не ловить деградации на пике.
Интеграционный контур включал:
  • библиотеку-обертку над Kafka (публикация/консьюмеры, ретраи, логирование);
  • унифицированные утилиты для ClickHouse (подключение, параметры, базовые паттерны запросов);
  • SOAP-сервисы для банковских интеграций: контракты, валидация, обработка fault-ответов и журналирование.
За счет унификации библиотек команда ускорила разработку новых интеграций и снизила риск «разъезда» по форматам и правилам обработки.

CI/CD и качество кода — GitLab + SonarQube

Чтобы изменения не зависели от ручных проверок, наш эксперт собрал конвейер в GitLab CI/CD: сборка, тесты, статический анализ, затем деплой. На этом же уровне были зафиксированы минимальные критерии качества — чтобы не тянуть технический долг дальше.
SonarQube использовался как системный фильтр — code smells, потенциальные уязвимости, дубли, базовые метрики поддерживаемости, а также quality gate под merge request. Под автоматизацию попали:

  • сборка и прогон unit-тестов на MR;
  • статический анализ (SonarQube) и блокирующие гейты;
  • единый шаблон пайплайна под модули;
  • деплой по согласованным правилам (окружения, теги, артефакты).
В итоге качество стало измеримым: меньше спорных ситуаций «можно ли мержить», больше прозрачности по рискам до выкладки.

Объем работ и результаты

Совокупный объем работ — 553 часа. За это время эксперт нашей компании закрыл развитие и рефакторинг модулей, выровнял проект под .NET 8, ускорил критичные сценарии через ADO.NET и Dapper, а также собрал инфраструктуру качества на GitLab CI/CD + SonarQube.
Отдельным итогом стали внутренние библиотеки для Kafka и ClickHouse и оформленные интеграции по SOAP (с предсказуемыми контрактами и единым подходом к ошибкам). Проект получил понятные правила архитектуры и процесс, который не зависит от героизма.
Нужны эксперты C#/.NET под развитие сложного продукта, интеграции и CI/CD? iStaff-it подберет разработчиков под ваш стек и подключит в формате IT-outstaffing. С аккуратным входом в процессы и понятным результатом на каждом этапе.