216 lines
4.1 KiB
Markdown
216 lines
4.1 KiB
Markdown
<!-- file: docs/studies/020-UROBURAS_CRATE_DECOMPOSITION_STUDY.md -->
|
|
<!-- version: 2 -->
|
|
|
|
# Uroburas — étude de décomposition en crates
|
|
|
|
## Statut
|
|
|
|
Étude non normative pour `0.2.0-0-pre.6`.
|
|
|
|
Les noms ci-dessous sont des candidats, pas encore des crates à créer immédiatement.
|
|
|
|
## Engine existant
|
|
|
|
À conserver comme fondation :
|
|
|
|
```text
|
|
crates/engines/engine-v1-common
|
|
crates/engines/engine-v1-platform-api
|
|
crates/engines/engine-v1-sdl
|
|
```
|
|
|
|
Le kernel ne doit pas absorber les systèmes de grille, score ou Snake uniquement parce que Uroburas en a besoin.
|
|
|
|
## Capabilities candidates
|
|
|
|
Famille possible :
|
|
|
|
```text
|
|
crates/capabilities/
|
|
game-assets-lib
|
|
game-input-lib
|
|
game-localization-lib
|
|
game-network-client-lib
|
|
game-network-realtime-api
|
|
game-network-websocket-lib
|
|
game-network-webtransport-lib
|
|
game-persistence-lib
|
|
game-audio-lib
|
|
```
|
|
|
|
Les noms finaux devront respecter les règles workspace et éviter les crates artificiellement petites.
|
|
|
|
## Game-systems candidates
|
|
|
|
Famille possible :
|
|
|
|
```text
|
|
crates/game-systems/
|
|
game-grid-lib
|
|
game-collision-grid-lib
|
|
game-stage-lib
|
|
game-score-lib
|
|
game-lives-lib
|
|
game-timed-entity-lib
|
|
game-pickup-lib
|
|
```
|
|
|
|
Ces crates ne sont créées que si leur API est suffisamment stable et réutilisable.
|
|
|
|
Des mécanismes très liés peuvent rester regroupés dans une même crate plutôt que multiplier les packages.
|
|
|
|
## Uroburas game crates
|
|
|
|
Proposition progressive :
|
|
|
|
```text
|
|
crates/games/
|
|
game-uroburas-lib
|
|
```
|
|
|
|
Cette crate compose les règles Uroburas.
|
|
|
|
Si la complexité le justifie plus tard :
|
|
|
|
```text
|
|
game-uroburas-core-lib
|
|
game-uroburas-content-lib
|
|
game-uroburas-protocol-lib
|
|
```
|
|
|
|
Mais ne pas splitter avant besoin réel.
|
|
|
|
`game-uroburas-lib` ne doit pas dépendre directement de :
|
|
|
|
- Actix ;
|
|
- Maud ;
|
|
- Lettre ;
|
|
- tokio-tungstenite ;
|
|
- SDK publicitaire ;
|
|
- Java Android ;
|
|
- Tauri API.
|
|
|
|
## Applications client
|
|
|
|
Candidats futurs :
|
|
|
|
```text
|
|
crates/apps/
|
|
game-uroburas-desktop
|
|
game-uroburas-wasm
|
|
game-uroburas-tauri
|
|
game-uroburas-android-entrypoint
|
|
```
|
|
|
|
Les apps composent :
|
|
|
|
- jeu ;
|
|
- adapters plateforme ;
|
|
- capabilities ;
|
|
- providers nécessaires.
|
|
|
|
## Server crates
|
|
|
|
Famille proposée :
|
|
|
|
```text
|
|
crates/servers/
|
|
uroburas-server-domain-lib
|
|
uroburas-server-api-lib
|
|
uroburas-server-web
|
|
uroburas-server-realtime
|
|
```
|
|
|
|
Puis seulement si besoin :
|
|
|
|
```text
|
|
uroburas-server-media
|
|
uroburas-server-admin
|
|
```
|
|
|
|
### server-domain-lib
|
|
|
|
Contient des concepts serveur partagés :
|
|
|
|
- PlayerId ;
|
|
- MapId/MapVersion ;
|
|
- ScoreSubmission ;
|
|
- HallOfFameEntry ;
|
|
- RewardGrant ;
|
|
- Session identifiers.
|
|
|
|
Ne contient pas Actix/Tungstenite/Tonic.
|
|
|
|
### server-api-lib
|
|
|
|
Contrats DTO/protocole :
|
|
|
|
- HTTP DTOs ;
|
|
- realtime messages indépendants du transport ;
|
|
- WebSocket mapping ;
|
|
- WebTransport mapping futur ;
|
|
- versioning ;
|
|
- validation structurale.
|
|
|
|
Les wire types restent distincts des modèles métier internes.
|
|
|
|
### server-web
|
|
|
|
- Actix Web ;
|
|
- Maud ;
|
|
- auth endpoints ;
|
|
- Hall of Fame ;
|
|
- maps/assets metadata ;
|
|
- administration initiale ;
|
|
- Fluent serveur ;
|
|
- Lettre.
|
|
|
|
### server-realtime
|
|
|
|
Future Mode 3/2 :
|
|
|
|
- Tokio ;
|
|
- tokio-tungstenite comme baseline WebSocket ;
|
|
- WebTransport/QUIC comme transport candidat ;
|
|
- adaptation transport séparée de la simulation ;
|
|
- rooms/worlds ;
|
|
- authoritative simulation ;
|
|
- snapshots/deltas ;
|
|
- spectator ;
|
|
- bots.
|
|
|
|
## Providers
|
|
|
|
Famille possible :
|
|
|
|
```text
|
|
crates/providers/
|
|
game-ads-api-lib
|
|
game-ads-<provider>-lib
|
|
game-auth-<provider>-lib
|
|
```
|
|
|
|
Ne pas créer les providers tant qu'ils ne sont pas nécessaires à une cible réelle.
|
|
|
|
## Tooling
|
|
|
|
Candidats futurs :
|
|
|
|
```text
|
|
crates/tools/
|
|
uroburas-map-editor
|
|
uroburas-skin-editor
|
|
```
|
|
|
|
Un éditeur Web peut aussi avoir sa propre app/host au lieu d'être une crate de jeu.
|
|
|
|
## Anti-monolithe
|
|
|
|
Avant d'ajouter une fonctionnalité à `game-uroburas-lib`, poser trois questions :
|
|
|
|
1. connaît-elle explicitement les règles Uroburas ?
|
|
2. serait-elle utile dans un autre jeu sans référence à Uroburas ?
|
|
3. dépend-elle d'une plateforme, d'un transport ou d'un provider ?
|
|
|
|
Si la réponse à 1 est non et à 2 ou 3 est oui, elle appartient probablement ailleurs.
|