Yavsc.Web is an empty template/draft project — no useful code, conceptually a duplicate of the front that lives in Yavsc.Org. Remove its mentions from: - Dockerfile, Dockerfile.backend: the COPY src/Yavsc.Web/*.csproj step is useless (the project is referenced nowhere downstream) - ROADMAP.md: the 'Perimetre technique' table no longer lists it - doc/architecture/decoupage-organisation.md: removed from the ASCII diagram and the per-project table Note: this commit only removes references; the empty project itself (src/Yavsc.Web/) and the yavsc.sln Project() entry are left in place for now. A future commit can rm -rf the directory and prune the .sln when we're sure nothing else still depends on it.
88 lines
5.5 KiB
Markdown
88 lines
5.5 KiB
Markdown
# Découpage des projets .NET
|
|
|
|
> **Récapitulatif** : Le code est réparti en sept projets .NET
|
|
> sous `src/`, organisés par rôle : domaine partagé, bibliothèque
|
|
> métier, front web utilisateur-facing, API REST principale,
|
|
> backend API dédié aux blogs, front admin, et tests. Détail dans
|
|
> cette page, racine de l'architecture : [Architecture.md](../Architecture.md).
|
|
|
|
## Vue d'ensemble
|
|
|
|
```
|
|
┌──────────────────────────────┐
|
|
│ Yavsc.Abstract (lib) │
|
|
│ Modèles du domaine partagés │
|
|
└──────────────┬───────────────┘
|
|
│
|
|
┌──────────────▼────────────────────┐
|
|
│ Yavsc.Server (lib) │
|
|
│ Helpers, EF, services │
|
|
└──────┬─────────┬──────────────┬───┘
|
|
│ │ │
|
|
┌─────────────▼──┐ ┌───▼──────────┐ ┌▼────────────────────┐
|
|
│ Yavsc.Org (web)│ │ Yavsc.Api │ │ Yavsc.Blogs (web) │
|
|
│ Front web │ │ (web) │ │ Backend API blogs │
|
|
│ + Identity- │ │ API REST │ │ (aucune vue Razor) │
|
|
│ Server │ │ principale │ │ déployé sur sous- │
|
|
│ + Razor views │ │ JwtBearer │ │ domaine en prod │
|
|
│ (héberge aussi │ └──────────────┘ └─────────────────────┘
|
|
│ le front des │
|
|
│ blogs) │
|
|
└────────────────┘
|
|
|
|
Clients externes :
|
|
- PostIt : client desktop Avalonia (cf. postit-oidc.md).
|
|
```
|
|
|
|
## Par projet
|
|
|
|
| Projet | Type SDK | Rôle |
|
|
|--------------------|----------------|-----------------------------------------------------------------------------------------------|
|
|
| `Yavsc.Abstract` | Library | Modèles du domaine partagés (entités, value objects, enums). Pas de dépendance framework. |
|
|
| `Yavsc.Server` | Library | Bibliothèque métier : `DbContext`, helpers PayPal/SMTP, services métier, modèles billing/blog. |
|
|
| `Yavsc.Org` | ASP.NET Web | Front web utilisateur-facing : Razor views, IdentityServer8 (OP), AccountController. **Héberge aussi les vues (front) des blogs**. |
|
|
| `Yavsc.Api` | ASP.NET Web | API REST JSON principale consommée par les clients externes (PostIt, …). JwtBearer auth. |
|
|
| `Yavsc.Blogs` | ASP.NET Web | **Backend API headless** dédié aux blogs (uniquement `*ApiController` + services + modèles — aucune vue Razor). Destiné à être déployé sur un sous-domaine en production, séparé du front web hébergé par `Yavsc.Org`. |
|
|
| `Yavsc.Org.Tests` | Test (xUnit) | Tests d'isolation du front web (`Yavsc.Org`) — fakes, controller tests. |
|
|
|
|
## Pourquoi ce découpage
|
|
|
|
- **`Yavsc.Abstract` séparé de `Yavsc.Server`** : permet aux clients
|
|
externes (PostIt — projet Avalonia sous `src/PostIt/`) de partager
|
|
les modèles DTO sans embarquer Entity Framework ni ASP.NET Core.
|
|
- **`Yavsc.Server` est une library, pas un web host** : on peut
|
|
tester les services sans démarrer Kestrel ; plusieurs fronts et
|
|
backends consomment les mêmes helpers sans dupliquer.
|
|
- **`Yavsc.Api` séparé de `Yavsc.Org`** : l'API REST principale
|
|
est destinée aux clients headless (PostIt, intégrations tierces) ;
|
|
elle n'a pas besoin des vues Razor ni d'IdentityServer.
|
|
Inversement, le front web peut servir ses propres pages serveur
|
|
sans exposer une API REST.
|
|
- **`Yavsc.Blogs` séparé en backend headless** : le front des blogs
|
|
(vues Razor) reste dans `Yavsc.Org` pour partager le rendu et
|
|
l'auth avec le reste de l'application. Le backend, lui, est
|
|
isolé dans son propre projet `Yavsc.Blogs` (uniquement des
|
|
`*ApiController` + services + modèles, sans aucune vue Razor),
|
|
destiné à être déployé sur un sous-domaine dédié en production
|
|
— ex: `blogs.yavsc.example` — pour pouvoir scaler / restreindre
|
|
l'API blog indépendamment du reste de la plateforme.
|
|
|
|
## Conséquences pratiques
|
|
|
|
- Une modification d'un modèle DDD dans `Yavsc.Abstract` peut
|
|
casser **plusieurs fronts et backends à la fois** (Org, Api,
|
|
Blogs, Web). C'est attendu ; les tests de `Yavsc.Org.Tests`
|
|
doivent suivre.
|
|
- Ajouter une route API dans `Yavsc.Api` n'implique pas de
|
|
recompiler `Yavsc.Org` (et inversement).
|
|
- `Yavsc.Blogs` et `Yavsc.Org` partagent le contexte EF via
|
|
`Yavsc.Server` mais n'ont pas de dépendance l'un envers l'autre :
|
|
la même base de données, deux hôtes distincts en production.
|
|
- `PostIt` (sous `src/PostIt/`) ne référence que `Yavsc.Abstract` ;
|
|
il n'embarque ni EF ni ASP.NET Core.
|
|
|
|
## Voir aussi
|
|
|
|
- [Architecture.md](../Architecture.md) — racine.
|
|
- [postit-oidc.md](postit-oidc.md) — PostIt consomme `Yavsc.Api`
|
|
via OIDC.
|