Мы используем cookie для стабильной работы сервиса. Подробнее

C#: Современная архитектура Vertical Slice,CQRS и event sourcing

ФорматОнлайн
Объём19 занятий
О курсе

Подробнее

Это практический курс по проектированию backend-сервисов на современном .NET. Мы не разбираем абстрактные примеры «в вакууме», а от начала до конца собираем один живой сервис — каталог книг — и по ходу наращиваем его: от чистого CRUD до event sourcing, живой ленты обновлений и запуска всего стека через .NET Aspire с полноценной телеметрией. Цель курса — научить организовывать backend-код так, чтобы его было легко читать, менять и расширять, и показать современный .NET-стек в деле. Почему стоит выбрать именно этот курс: всё строится вокруг одного реального проекта, а не разрозненных сниппетов — виден полный путь и связи между частями; каждый шаг объясняется и в видео, и в развёрнутой текстовой лекции с кодом дословно из проекта и врезками теории «почему так»; курс честно показывает альтернативы и трейд-оффы: MediatR против своего посредника, Mapster против Mapperly, Result против исключений, богатая модель против анемичной, генерация кода против рефлексии; затрагиваются темы, до которых обычно «не доходят руки»: event sourcing, проекции, полнотекстовый поиск Postgres, Server-Sent Events, наблюдаемость и оркестрация локальной среды на .NET Aspire. После освоения у вас останется собственный референс-проект и понимание, как и, главное, зачем применять эти приёмы на своих задачах. Что входит в курс (по разделам): подготовка проекта, решение и структура, знакомство с Marten и CQRS; модель данных, PostgreSQL в Docker, наполнение базы, принципы VSA и SOLID; операции над каталогом: список с пагинацией, добавление, обновление, удаление, обработка ошибок; сквозная функциональность через pipeline behaviors (валидация, мониторинг времени); рефакторинг и обновление до .NET 10, документация API (OpenAPI + Scalar); собственный посредник вместо MediatR — и переезд на Wolverine; альтернативы Mapster (Mapperly) и подход к ошибкам (паттерн Result, библиотека ErrorOr); полнотекстовый поиск на PostgreSQL; переезд на Rich Domain Model; event sourcing: события, проекции, машина времени, живая лента цен на SSE; бонус: клиент-дашборд, симулятор нагрузки; .NET Aspire: ServiceDefaults, телеметрия и health-checks, AppHost с PostgreSQL и API как ресурсами, запуск всего стека одной командой и дашборд, плюс бонус — Prometheus и Grafana.    
Требования

Что нужно для старта

  • Чтобы курс шёл комфортно, желательно заранее:
  • уверенно знать C#: классы и интерфейсы, дженерики и ограничения (where), async/await, LINQ, nullable-ссылочные типы;
  • иметь базовое представление об ASP.NET Core и о том, как устроен HTTP/REST (методы, статус-коды, маршруты);
  • уметь пользоваться Git и Docker на уровне базовых команд (клонировать репозиторий, поднять контейнер).
  • Не требуется заранее: опыт с Marten, Wolverine, Mapperly, event sourcing, CQRS, Vertical Slice Architecture, .NET Aspire и OpenTelemetry — всё это объясняется в курсе с нуля.
Результат

Что вы получите

  • проектировать backend по Vertical Slice Architecture, где вся логика одной фичи собрана в одном месте;
  • разделять операции на команды и запросы по принципу CQRS;
  • строить REST API на ASP.NET Core с минимальными эндпоинтами (Carter);
  • работать с PostgreSQL как с документной базой через Marten;
  • применять паттерн «Посредник»: использовать MediatR — и написать собственный аналог с нуля, разобравшись в рефлексии и дженериках;
  • переходить на Wolverine и сравнивать генерацию кода на старте с поиском обработчиков через рефлексию;
  • настраивать валидацию (FluentValidation) и маппинг объектов (Mapster, затем Mapperly на source generators);
  • обрабатывать ошибки через паттерн Result и библиотеку ErrorOr, а не только исключениями, и выбирать подходящую стратегию;
  • реализовывать полнотекстовый поиск средствами самого PostgreSQL, со словоформами;
  • переводить анемичную модель в Rich Domain Model — с инвариантами, фабриками и доменным поведением;
  • применять event sourcing: хранить историю изменений, строить проекции и получать состояние на любой момент прошлого («time travel»);
  • организовывать обновления в реальном времени через Server-Sent Events;
  • запускать весь стек (API + база + инфраструктура) одной командой с помощью .NET Aspire: описывать ресурсы в AppHost и связывать их между собой;
  • настраивать наблюдаемость: три сигнала телеметрии (логи, метрики, трейсы) через OpenTelemetry и OTLP, собственные `ActivitySource`, health-checks для liveness и readiness;
  • читать дашборд Aspire — трейсы запросов, метрики и логи сервиса в одном окне;
  • подключать внешнюю инфраструктуру как контейнеры (Prometheus и Grafana) и экспортировать в неё метрики приложения.
Аудитория

Для кого этот курс

  • .NET-разработчики уровня junior/middle, которые знают C#, но хотят вырасти в проектировании backend-архитектуры.
  • Те, кто пишет на ASP.NET Core и хочет уйти от классической многослойной архитектуры к Vertical Slice + CQRS.
  • Разработчики, которым интересны Marten, Wolverine, event sourcing, полнотекстовый поиск Postgres, .NET Aspire, но непонятно, с чего начать и как это сочетается вместе.
  • Все, кто готовится к собеседованиям, где спрашивают про архитектуру, CQRS, обработку ошибок и работу с БД.
  • Когда это особенно пригодится: старт нового сервиса «с чистого листа», рефакторинг легаси-проекта, желание навести порядок в разросшемся коде или просто прокачать инженерный кругозор на современном стеке.
Содержание

Программа курса

19 занятий
ТемаЧто внутри
01Начало

- Как проходить этот курс
- Бонус оффер

02Подготовка проекта

- Как создать проект
- Базовая структура проекта
- Установка зависимостей
- Что за посредник
- Введение в CQRS

03Старт разработки

- Инфраструктура для команд
- Инфраструктура для запросов
- Рефакторинг
- Несколько слов о подходе в проектировании
- Модель
- Контейнер для базы данных
- Подключение к базе данных
- Интеграция базы данных
- Про настройки форматирования
- Наполнение базы начальными данными
- Обновление базы данных
- Про архитектуру

04Основа

- Инфраструктура GET
- Инфраструктура POST
- Инфраструктура обработки ошибок
- Инфраструктура PUT

05Одна задачка с собеседования

- Разбор задачи

06Перспективы развития

- Техническое задание на доработку

07Реализация

- Получение книги по Id
- Удаление книги

08Рефакторинг и обновление библиотек

- Docker Compose, .NET 10 и обновление библиотек
- Единое пространство имён Catalog.Api
- RESTful-маршрут для GetBookById
- Валидатор UpdateBookCommand
- Настройка .editorconfig
- Документация API: OpenAPI и Scalar UI

09Попытка создания собственного Посредника

- Зачем уходить от MediatR: базовые контракты
- Интерфейсы ISender и IPipelineBehavior
- Реализация Sender: поиск обработчиков через DI
- Конвейер IPipelineBehavior
- Регистрация в DI: AddMediator
- Убираем MediatR, включаем свою реализацию

10Альтернатива MediatR

- Знакомство с Wolverine
- Связка WolverineFx.Marten
- Эндпоинты на IMessageBus
- Хендлеры по конвенции Wolverine
- Валидация: Wolverine middleware и FluentValidation
- WolverineFx.RuntimeCompilation

11Альтернатива Mapster

- Riok.Mapperly вместо Mapster
- Полный переход на Mapperly

12Немного холивара: паттерн Result

- Тип Result: успех и ошибка без исключений
- Переводим GetBookById на Result
- ErrorType: разные HTTP-статусы под причины отказа
- Готовое решение: библиотека ErrorOr

13Техническое задание

- Техническое задание: поиск книг по слову

14Полнотекстовый поиск: возможности Postgres

- Реализация поиска: эндпоинт /books/search
- Полнотекстовый индекс Postgres и Marten

15Переезд на Rich Domain Model

- Фабрика Book.Create и доменная валидация
- Доменное поведение: ChangePrice и UpdateDetails
- Инкапсуляция: приватные сеттеры и материализация
- Итоги: чем хороша Rich Domain Model

16Быстрый старт в SSE

- Событие BookPriceChanged: первая запись в event store
- Таблицы event store: mt_streams и mt_events
- Проекция BookPriceHistory и эндпоинт истории цены
- Time travel: параметр ?asOf=
- Живая лента цен: Server-Sent Events

17Бонусный урок: демонстрация

- Клиент-дашборд, симулятор нагрузки и Postman-коллекция

18.NET Aspire: оркестрация и наблюдаемость

- Проект ServiceDefaults: служебные умолчания Aspire
- Телеметрия и health-checks: API подключает ServiceDefaults
- AppHost: PostgreSQL и Api как ресурсы Aspire
- Весь стек одной командой: запуск и дашборд Aspire
- Бонус: Prometheus и Grafana через AddContainer

19Это всё

- Куда двигаться дальше?

01Начало

- Как проходить этот курс
- Бонус оффер

02Подготовка проекта

- Как создать проект
- Базовая структура проекта
- Установка зависимостей
- Что за посредник
- Введение в CQRS

03Старт разработки

- Инфраструктура для команд
- Инфраструктура для запросов
- Рефакторинг
- Несколько слов о подходе в проектировании
- Модель
- Контейнер для базы данных
- Подключение к базе данных
- Интеграция базы данных
- Про настройки форматирования
- Наполнение базы начальными данными
- Обновление базы данных
- Про архитектуру

04Основа

- Инфраструктура GET
- Инфраструктура POST
- Инфраструктура обработки ошибок
- Инфраструктура PUT

05Одна задачка с собеседования

- Разбор задачи

06Перспективы развития

- Техническое задание на доработку

07Реализация

- Получение книги по Id
- Удаление книги

08Рефакторинг и обновление библиотек

- Docker Compose, .NET 10 и обновление библиотек
- Единое пространство имён Catalog.Api
- RESTful-маршрут для GetBookById
- Валидатор UpdateBookCommand
- Настройка .editorconfig
- Документация API: OpenAPI и Scalar UI

09Попытка создания собственного Посредника

- Зачем уходить от MediatR: базовые контракты
- Интерфейсы ISender и IPipelineBehavior
- Реализация Sender: поиск обработчиков через DI
- Конвейер IPipelineBehavior
- Регистрация в DI: AddMediator
- Убираем MediatR, включаем свою реализацию

10Альтернатива MediatR

- Знакомство с Wolverine
- Связка WolverineFx.Marten
- Эндпоинты на IMessageBus
- Хендлеры по конвенции Wolverine
- Валидация: Wolverine middleware и FluentValidation
- WolverineFx.RuntimeCompilation

11Альтернатива Mapster

- Riok.Mapperly вместо Mapster
- Полный переход на Mapperly

12Немного холивара: паттерн Result

- Тип Result: успех и ошибка без исключений
- Переводим GetBookById на Result
- ErrorType: разные HTTP-статусы под причины отказа
- Готовое решение: библиотека ErrorOr

13Техническое задание

- Техническое задание: поиск книг по слову

14Полнотекстовый поиск: возможности Postgres

- Реализация поиска: эндпоинт /books/search
- Полнотекстовый индекс Postgres и Marten

15Переезд на Rich Domain Model

- Фабрика Book.Create и доменная валидация
- Доменное поведение: ChangePrice и UpdateDetails
- Инкапсуляция: приватные сеттеры и материализация
- Итоги: чем хороша Rich Domain Model

16Быстрый старт в SSE

- Событие BookPriceChanged: первая запись в event store
- Таблицы event store: mt_streams и mt_events
- Проекция BookPriceHistory и эндпоинт истории цены
- Time travel: параметр ?asOf=
- Живая лента цен: Server-Sent Events

17Бонусный урок: демонстрация

- Клиент-дашборд, симулятор нагрузки и Postman-коллекция

18.NET Aspire: оркестрация и наблюдаемость

- Проект ServiceDefaults: служебные умолчания Aspire
- Телеметрия и health-checks: API подключает ServiceDefaults
- AppHost: PostgreSQL и Api как ресурсы Aspire
- Весь стек одной командой: запуск и дашборд Aspire
- Бонус: Prometheus и Grafana через AddContainer

19Это всё

- Куда двигаться дальше?

Организатор

Автор курса

StepikStepik
Stepik — образовательная платформа и конструктор онлайн-курсов. Мы разрабатываем алгоритмы адаптивного обучения, сотрудничаем с авторами MOOC, помогаем в проведении олимпиад и программ переподготовки. Наша цель — сделать образование открытым и удобным. Stepik — широко известная российская образовательная платформа, основанная в 2013 году. На Stepik зарегистрировано более миллиона пользователей из России и стран СНГ. В настоящее время на Stepik представлены несколько тысяч учебных курсов на самые разные темы.
Подробнее об авторе
Мнения учеников

Отзывы о курсе

Оставьте отзыв

Расскажите о качестве обучения, поддержке и результате. Это поможет другим выбрать организацию осознанно.

Напишите ваш коментарий, не менее 30 символов

Нажимая кнопку, вы даете согласие на обработку персональных данных

Оставьте заявку

Консультант ответит на вопросы о курсе «C#: Современная архитектура Vertical Slice,CQRS и event sourcing» и поможет разобраться в деталях обучения.

Комментарий ...

Нажимая кнопку, вы даете согласие на обработку персональных данных

Информация обновлена 7 сентября 2026 г.

Продолжить выбор

Похожие курсы

Основы C#
Основы C#

Курс несомненно подойдёт начинающим разработчикам, который хотят освоить современный и востребованный язык программирования. Курс мы начнём с изучения основ - встроенных в язык ти…

Онлайн10 занятий
3 999 ₽
Начать без затрат

Бесплатные курсы

Python для решения практических задач
Бесплатно
Python для решения практических задач

Научились решать простые задачи на питоне, но не можете понять, как сделать что-то полезное? Наш курс научит вас правильно гуглить! На примерах задач сбора данных (Data Scraping)…

Онлайн5 занятий
Бесплатно
Claude Code с нуля до реальных задач
Бесплатно1 месяц
Claude Code с нуля до реальных задач

Вы разовьёте аналитическое мышление, научитесь искать уязвимости и обеспечивать безопасность IT-систем. Освоите востребованную профессию даже с нулевым опытом в IT. Программа курс…

Онлайн
Бесплатноот 11 647 ₽/мес
Markdown синтаксис
Бесплатно2 часа
Markdown синтаксис

Этот курс предназначен для всех, кто работает с текстом в digital-среде. Вы освоите Markdown — универсальный язык разметки, который используют в GitHub, документации, блогах и соо…

Онлайн3 занятий
Бесплатно