Files
h-school/docs/design/projects.md
T

54 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Нарезка проектов (целевая)
Сейчас в коде: `Protocol ← Server → Simulation`. Этого мало, когда появятся defs, карта и моды.
Класть каталог в Simulation (рядом с Arch) или в Server (рядом с Kestrel) — оба варианта смешают
слои. Ниже — куда что идёт в этом срезе. `architecture.md` правится, когда код так и станет.
## Зависимости
```
Protocol — ни на кого из игровых проектов (только байты)
Content — ни на Protocol, ни на Simulation, ни на ASP.NET
Simulation → Content (каталог и раскладка, без файловых путей хоста)
Server → Protocol, Simulation, Content
Client — своя сторона Protocol (TS) + HTTP
```
Клиент по-прежнему не ссылается на C#-проекты.
## Кто чем владеет
| Проект | Да | Нет |
| --- | --- | --- |
| **HSchool.Content** (новый) | Типы def, JSONC-загрузчик, наследование, патчи, слияние локалей, граф карты, валидация связности | Arch, часы, HTTP, потоки, пути `mods/` с диска хоста |
| **HSchool.Simulation** | `School`, `GameClock`, Arch `World`, тик, применение раскладки к миру | Kestrel, сокеты, `Directory.Enumerate`, сейв-файлы |
| **HSchool.Server** | Хост, супервизор, работник-поток, `mods/` и `saves/` из конфига, HTTP/WS, DTO запросов | Правила «комната должна быть связана», схема Chair |
| **HSchool.Protocol** | Кадры сокета, в том числе снимок карты и locale в Hello | Имена комнат, JSONC |
| **HSchool.Client** | DOM, `t()` для хрома, рисует снимок | Файлы модов, симуляция |
Content принимает уже открытые потоки или список документов (сервер прочитал папки и отдал
байты/пути через узкий порт вроде «вот корневые каталоги этих id»). Тогда тесты Content кормят
фикстурами из `tests/`, без `appsettings`.
Сейв: **форма** (часы + id модов + раскладка) собирается из типов Simulation/Content; **запись
файла** — Server, и только с потока работника.
## Зачем не сваливать в Simulation
Arch и фиксированный тик — про живую школу. Парсер JSONC, `defName` и проверка графа не знают,
что такое tick. Их гоняют сотни раз в юните без мира. Если загрузчик сидит в Simulation, любой
тест каталога тащит ECS и наоборот.
## Зачем не сваливать в Server
Иначе связность карты и last-wins нельзя проверить без Aspire. Хост должен быть тонким:
найти папки, сериализовать HTTP, крутить потоки.
## Тесты
- `tests/HSchool.Content.Tests` — фикстуры JSONC, коллизии имён, дырявый граф, двор обязателен.
- `HSchool.Simulation.Tests` — часы, тик, «школа с таким каталогом живёт».
- `HSchool.AppHost.Tests` — create с картой, рестарт, сейв на диске.
Ориентир в `AGENTS.md` обновить в фазе, которая заводит проект (сейчас это фаза 3).