Подробнее
Что нужно для старта
- Чтобы курс шёл комфортно, желательно заранее:
- уверенно знать 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, обработку ошибок и работу с БД.
- Когда это особенно пригодится: старт нового сервиса «с чистого листа», рефакторинг легаси-проекта, желание навести порядок в разросшемся коде или просто прокачать инженерный кругозор на современном стеке.
Программа курса
- Как проходить этот курс
- Бонус оффер
- Как создать проект
- Базовая структура проекта
- Установка зависимостей
- Что за посредник
- Введение в CQRS
- Инфраструктура для команд
- Инфраструктура для запросов
- Рефакторинг
- Несколько слов о подходе в проектировании
- Модель
- Контейнер для базы данных
- Подключение к базе данных
- Интеграция базы данных
- Про настройки форматирования
- Наполнение базы начальными данными
- Обновление базы данных
- Про архитектуру
- Инфраструктура GET
- Инфраструктура POST
- Инфраструктура обработки ошибок
- Инфраструктура PUT
- Разбор задачи
- Техническое задание на доработку
- Получение книги по Id
- Удаление книги
- Docker Compose, .NET 10 и обновление библиотек
- Единое пространство имён Catalog.Api
- RESTful-маршрут для GetBookById
- Валидатор UpdateBookCommand
- Настройка .editorconfig
- Документация API: OpenAPI и Scalar UI
- Зачем уходить от MediatR: базовые контракты
- Интерфейсы ISender и IPipelineBehavior
- Реализация Sender: поиск обработчиков через DI
- Конвейер IPipelineBehavior
- Регистрация в DI: AddMediator
- Убираем MediatR, включаем свою реализацию
- Знакомство с Wolverine
- Связка WolverineFx.Marten
- Эндпоинты на IMessageBus
- Хендлеры по конвенции Wolverine
- Валидация: Wolverine middleware и FluentValidation
- WolverineFx.RuntimeCompilation
- Riok.Mapperly вместо Mapster
- Полный переход на Mapperly
- Тип Result: успех и ошибка без исключений
- Переводим GetBookById на Result
- ErrorType: разные HTTP-статусы под причины отказа
- Готовое решение: библиотека ErrorOr
- Техническое задание: поиск книг по слову
- Реализация поиска: эндпоинт /books/search
- Полнотекстовый индекс Postgres и Marten
- Фабрика Book.Create и доменная валидация
- Доменное поведение: ChangePrice и UpdateDetails
- Инкапсуляция: приватные сеттеры и материализация
- Итоги: чем хороша Rich Domain Model
- Событие BookPriceChanged: первая запись в event store
- Таблицы event store: mt_streams и mt_events
- Проекция BookPriceHistory и эндпоинт истории цены
- Time travel: параметр ?asOf=
- Живая лента цен: Server-Sent Events
- Клиент-дашборд, симулятор нагрузки и Postman-коллекция
- Проект ServiceDefaults: служебные умолчания Aspire
- Телеметрия и health-checks: API подключает ServiceDefaults
- AppHost: PostgreSQL и Api как ресурсы Aspire
- Весь стек одной командой: запуск и дашборд Aspire
- Бонус: Prometheus и Grafana через AddContainer
- Куда двигаться дальше?
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Это всё
- Куда двигаться дальше?
Отзывы о курсе
Оставьте отзыв
Расскажите о качестве обучения, поддержке и результате. Это поможет другим выбрать организацию осознанно.
Оставьте заявку
Консультант ответит на вопросы о курсе «C#: Современная архитектура Vertical Slice,CQRS и event sourcing» и поможет разобраться в деталях обучения.
Нажимая кнопку, вы даете согласие на обработку персональных данных
Информация обновлена 7 сентября 2026 г.

Stepik 















