Documents the per-project layout under src/ (Abstract, Server, Org, Api, Blogs, Web, Org.Tests) as one of the two remaining items of Jalon 0 in ROADMAP.md: 'Decoupage Yavsc.Org vs Yavsc.Server vs Yavsc.Api clarifie dans l'Architecture' The page is referenced from the new doc/README.md index, and will also be linked from CONTRIBUTING.md in the next commit.
84 lines
5 KiB
Markdown
84 lines
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, blog, 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 (web) │
|
|
│ Front web │ │ API REST JSON │
|
|
│ + Identity- │ │ JwtBearer │
|
|
│ Server │ │ │
|
|
│ + Razor views │ └────────────────────┘
|
|
└────────────────┘
|
|
│
|
|
┌──────▼────────────────────────────┐
|
|
│ Yavsc.Blogs (web) │
|
|
│ Front web spécifique au blog │
|
|
│ (consomme Yavsc.Server) │
|
|
└───────────────────────────────────┘
|
|
|
|
Clients externes :
|
|
- Yavsc.Web : front admin / expérimentation, JwtBearer.
|
|
- 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, Razor. |
|
|
| `Yavsc.Api` | ASP.NET Web | API REST JSON consommée par les clients externes (PostIt, …). JwtBearer auth. |
|
|
| `Yavsc.Blogs` | ASP.NET Web | Sous-domaine front web spécifique au blog, autonome mais consomme `Yavsc.Server`. |
|
|
| `Yavsc.Web` | ASP.NET Web | Front admin / expérimentations, JwtBearer, référence `Yavsc.Abstract` et `Yavsc.Server`. |
|
|
| `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
|
|
(Org, Api, Blogs) consomment les mêmes helpers sans dupliquer.
|
|
- **`Yavsc.Api` séparé de `Yavsc.Org`** : l'API REST 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é** : le blog a son propre cycle de vie
|
|
(déploiement, modèle de contenu) tout en réutilisant le contexte
|
|
EF de `Yavsc.Server`.
|
|
|
|
## Conséquences pratiques
|
|
|
|
- Une modification d'un modèle DDD dans `Yavsc.Abstract` peut
|
|
casser **plusieurs fronts à 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).
|
|
- `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.
|