Перейти к содержанию

Проект защиты

Проект защиты — изолированное приложение в предметной области геологии, которое стажёр строит с первого дня Фазы 1 и защищает на гейте в конце мес. 5/6. Это не упражнение и не курсовая — это реальный мини-продукт, нарастающий по мере освоения стека команды DeepGeo.

Принципы

  • Изолированный репозиторий. Проект живёт в отдельном git-репозитории стажёра. Доступа к основному коду продукта нет до защиты.
  • Обучение через строительство. Каждая веха M1–M4 добавляет к проекту новый слой. Теория осваивается в объёме, необходимом для текущей задачи.
  • Реальная предметная область. Проект работает с агрегатами из домена DeepGeo, а не с абстрактным «магазином» или «блогом». Сверка корректности полей — с домен-экспертом.
  • Командный стек. Технологии — те же, что в src/GeotimLab.*/GeotimLab.*.csproj. Никаких упрощений «для учебности» сверх необходимого.

Предметная область

Проект работает с цепочкой реальных агрегатов из домена инженерной геологии:

Project → Borehole → Sample → Sample_Lab → ParameterValue
Агрегат Что представляет Пример
Project Инженерно-геологический проект «Изыскания под здание по адресу X»
Borehole Горная выработка (скважина) «Скв-1», глубина 15.0 м, координаты
Sample Образец грунта «Образец-001», интервал 2.5–2.8 м
Sample_Lab Лабораторный образец с результатами испытаний Лабораторный шифр, дата испытания
ParameterValue Значение параметра Влажность = 12.5%, плотность = 1.98 г/см³

DDD-конвенция: только FK, без навигационных свойств

Связи между агрегатами описываются только внешними ключами. Навигационные свойства между агрегатами запрещены — это сознательная конвенция команды DeepGeo, и она соблюдается в проекте защиты с M1.

Например, Sample ссылается на выработку через поле BoreholeId (внешний ключ), но не через свойство-объект Borehole Borehole. Это правило касается связей между агрегатами — внутри одного агрегата навигация допустима.

Сверка корректности полей каждого агрегата — с домен-экспертом. Стажёр не выдумывает структуру, а уточняет её по реальной предметке. Конкретный состав и типы полей доменных классов — самостоятельное решение в рамках M1, на основе Swagger-ответов стенда и консультаций с домен-экспертом.

Архитектура проекта

Проект строится по Clean Architecture. Слои нарастают по вехам:

GeoLabDefense/
├── src/
│   ├── Domain/              # M1: агрегаты Project, Borehole, Sample, Sample_Lab, ParameterValue
│   ├── Application/         # M1: парсер (CSV/JSON → домен), M3: валидация, маппинг
│   ├── Infrastructure/      # M2: EF Core + PostgreSQL, миграции
│   └── Web/                 # M3: Web API, M4: Blazor UI
├── tests/
│   └── GeoLabDefense.UnitTests/   # xUnit, с M1
└── docs/
    └── defense.md           # документ к защите: архитектура, demo-сценарий

Направление зависимостей — строго внутрь: Web → Application → Domain. Domain не зависит ни от кого. Это проверяется на code review защиты.

Что должно быть готово к защите

Минимальные критерии готовности (детально — в чек-листе):

  • Функциональность: загрузка лабораторных данных из CSV/JSON → сохранение в PostgreSQL → REST/OData API → Blazor UI для просмотра.
  • Код: Clean Architecture, DDD-конвенции (только FK), читаемые классы, обработка ошибок.
  • Тесты: unit-тесты на парсер и ключевые операции (xUnit).
  • Инженерная зрелость: git-гигиена (осмысленные коммиты, ветки под задачи), README с инструкцией запуска, docs/defense.md.
  • Понимание: стажёр объясняет направление зависимостей, обосновывает выбор конвенций, отвечает на вопросы по своему коду.

Эволюция проекта по вехам

Веха Состояние проекта
После M0 Пустой репозиторий, окружение настроено
После M1 Парсер читает CSV/JSON, создаёт доменные объекты, есть unit-тесты
После M2 Данные сохраняются в PostgreSQL через EF Core, есть миграции
После M3 REST/OData API для чтения и записи данных, валидация, маппинг в DTO
После M4 Blazor UI поверх API, готово демо и docs/defense.md

Сопровождение наставником

  • Еженедельная контрольная точка (~30 минут):.onput ревью прогресса, ответы на вопросы, корректировка направления.
  • Code review ключевых коммитов по запросу стажёра или при затыках.
  • На гейте наставник даёт материалы для оценки тимлиду, но финальное решение — за тимлидом.

Что НЕ входит в проект защиты

Чтобы удержать скоуп в 6 месяцев:

  • Авторизация и аутентификация (все эндпоинты открытые).
  • Мультитенантность (один тенант).
  • Файловое хранилище (S3/MinIO) — данные только в БД.
  • Сложные расчёты из боевого DeepGeo (LABM/LABP/LABS) — только хранение ParameterValue, без их вычисления.
  • Интеграция с внешними сервисами.
  • CI/CD и контейнеризация.

Эти темы — материал для Фазы 2, после получения доступа к основному репозиторию.


Дальше

  • ⬅️ Обзор roadmap — дорожная карта M0–M4
  • ➡️ QA-трек — параллельный поток работы с багами
  • ➡️ M0 — старт — первая веха, с чего начать practically
  • ✅ Чек-листы — критерии прохождения вех и гейта