M4: Blazor UI и подготовка к защите
Заключительная веха Фазы 1. На M4 поверх API из M3 строится пользовательский интерфейс на Blazor Server, а проект доводится до состояния, готового к гейту защиты: документация, демо-сценарий, проработка вопросов для code review.
⚠️ Уровень детализации. Постановка задачи и целевые навыки зафиксированы. Конкретные шаги реализации (состав страниц, выбор компонентов Radzen, структура демо) — самостоятельное решение стажёра на основе материалов. Снять пометку и уточнить детали можно после сверки с
intern-development-strategy-design.md.
Срок
Месяцы 5–6 Фазы 1 (~50–80 часов, включая подготовку к защите).
Цель
- Построить Blazor Server UI для работы с проектом защиты.
- Подготовить проект к гейту: README,
docs/defense.md, демо-сценарий. - Подготовиться к code review: знать свой код, уметь обосновывать решения.
Целевые навыки
| Группа | Что осваивается |
|---|---|
| Blazor Server | Компоненты .razor, маршрутизация, @page, @code, @inject |
| Razor-синтаксис | @if, @foreach, @bind, @onclick, интерполяция строк |
| Жизненный цикл компонента | OnInitializedAsync, загрузка данных |
| Формы и валидация | EditForm, InputText, DataAnnotationsValidator или FluentValidation |
| Radzen.Blazor | Базовые компоненты Radzen как альтернатива голым HTML-элементам |
| HTTP-клиент из Blazor | HttpClient, GetFromJsonAsync, PostAsJsonAsync |
| Demo-навык | Подготовка и проведение демо своего кода |
| Code review-готовность | Умение объяснить направление зависимостей, обосновать выбор конвенций |
Технологии на M4
Radzen.Blazor— UI-компонентыSystem.Net.Http.Json— helpers для HTTP из Blazor
Задание
Постановка
Поверх API из M3 построить Blazor Server UI, через который пользователь может:
- просматривать данные проекта защиты (проекты → выработки → образцы → параметры);
- загружать новые данные через парсер;
- при желании — редактировать и удалять записи.
Параллельно подготовить проект к гейту защиты.
Требования к результату
UI — навигация по данным
Минимальный набор страниц, обеспечивающий навигацию по иерархии данных:
- список проектов;
- детали проекта (выработки в нём);
- детали выработки (образцы);
- детали образца (лабораторные данные и значения параметров).
Структура страниц, состав колонок, навигация между ними — самостоятельное решение. Руководствоваться соображениями удобства: пользователь должен иметь возможность за разумное число кликов дойти от проекта до значения параметра и обратно.
UI — загрузка данных
Минимум одна страница с формой загрузки файла (CSV/JSON). Форма вызывает эндпоинт парсера из M3, показывает результат: сколько объектов создано, какие warnings возникли.
Использование Radzen
Хотя бы на одной странице использовать компоненты Radzen.Blazor вместо голых HTML-элементов. Например, таблицу (RadzenDataGrid), кнопку (RadzenButton), форму ввода. Решение, где именно Radzen уместен — самостоятельное.
Связь с API
UI работает с API из M3 по HTTP, не с БД напрямую. Использовать HttpClient (встроенный), регистрация через DI.
Документация к защите
Создать docs/defense.md — документ, представляемый на гейте. Должен содержать:
- Архитектуру решения. Слои, направление зависимостей. Как соотносится с Clean Architecture.
- Доменную модель. Почему такая структура, где сверялась с домен-экспертом.
- Карту технологий. Что из стека DeepGeo применено и где.
- Что сделано, что не сделано. Честная оценка: где вышло хорошо, где не успел.
- Демо-сценарий. Пошаговый сценарий проведения демо.
- Ключевые решения. Несколько примеров нетривиальных решений с обоснованием.
README
Обновить README.md так, чтобы новый разработчик (или тимлид на гейте) мог запустить проект по инструкции: какие инструменты нужны, какие команды выполнить, на каком URL откроется UI.
Подготовка к code review
На гейте будет code review — обсуждение кода с тимлидом. Заранее продумать ответы на вопросы вида:
- направление зависимостей в решении и почему оно такое;
- почему там, где есть LINQ-проекция, она сделана до материализации (а не через
Include+ маппинг в памяти); - где и почему применена спецификация, а не голый
.Where(); - как валидируется конкретный DTO и почему FluentValidation, а не data-annotations;
- как в схеме БД соблюдается конвенция «только FK»;
- что произойдёт, если в парсер подать битый файл, и где это обрабатывается.
Список не исчерпывающий — это ориентир. Цель: не «вызубрить ответы», а разобраться в собственном коде так, чтобы рассуждать о нём.
Контрольная точка
Перед гейтом — встреча с наставником:
- продемонстрировать UI локально;
- пройти демо-сценарий от начала до конца;
- показать
docs/defense.md; - обсудить 3–5 потенциальных вопросов code review.
Чек-лист завершения M4 и готовности к гейту
- Blazor UI запускается локально
- Минимум 4 страницы навигации по данным реализованы
- Страница загрузки файла в парсер работает end-to-end
- Radzen использован хотя бы на одной странице
- UI обращается к API по HTTP, не к БД напрямую
- README с инструкцией запуска обновлён
-
docs/defense.mdнаписан - Демо-сценарий отрепетирован
- Code review-вопросы проработаны
- QA-трек: стабильный поток баг-репортов и еженедельных отчётов
- Все тесты проходят
После этого — гейт защиты перед тимлидом. Формат и критерии оценки — в чек-листе гейта.
Материалы по темам
Blazor — основы
- metanit.com — Blazor — основная глава (единственное полное руководство на русском).
- metanit.com — Компоненты Razor
- Microsoft Learn — Blazor (RU)
Razor-синтаксис
- metanit.com — Обработка событий
- metanit.com — Привязка данных
- metanit.com — Жизненный цикл компонента
Формы и валидация
HTTP-клиент из Blazor
Radzen.Blazor
- Radzen.Blazor — документация — каталог компонентов с примерами.
Подготовка к code review
- Clean Architecture — введение (RU, Хабр)
- DDD: предметно-ориентированное проектирование (RU, Хабр) — введение.
Прогресс
[■■■■■] M4 из 5 вех — финал Фазы 1. Все вехи позади, дальше — гейт защиты.
- ⬅️ M3 — Web API
- 🎯 Чек-лист гейта защиты — критерии финальной оценки
- 🐛 QA-трек — должен быть стабильный поток репортов и метрик
📚 Полный список ресурсов — в разделе Ресурсы.