ajout readme

This commit is contained in:
Grizouille
2025-12-13 17:40:21 +01:00
parent 31544bd04b
commit 7e0cd13329

View File

@@ -1,6 +1,259 @@
# Exemple final de ce à quoi on pourrait arriver
# 🧠 Architecture & Bonnes Pratiques MiniJeuxFinal
Le projet **MiniJeuxFinal** a été conçu comme un support pédagogique et technique visant à appliquer des **bonnes pratiques de conception logicielle** en C#.<br/>
Lobjectif principal est dobtenir un code **maintenable**, **testable** et **facilement extensible**, même pour un projet de petite taille.
## 🎯 Objectifs de conception
* Ajouter de **nouveaux jeux** sans modifier lexistant
* Séparer clairement :
* le **cœur métier**
* l**interface utilisateur**
* les **dépendances techniques**
* Favoriser la **testabilité**
* Éviter le couplage fort et le code rigide
## 🧩 Architecture Hexagonale (Ports & Adapters)
Le projet applique une **architecture hexagonale** (aussi appelée *Ports & Adapters*).
Cette architecture vise à **isoler le cœur métier** de toute dépendance externe (UI, console, hasard, etc.).
### 🧠 Cœur métier (Domaine)
Le domaine est situé dans le dossier :
```
Games/
```
Il contient :
* les règles du jeu
* les interactions entre joueurs
* les actions possibles
👉 Le domaine **ne dépend daucune implémentation technique**.
### 🔌 Ports (Interfaces)
Les **ports** sont définis sous forme dinterfaces et représentent les contrats du domaine.
**Ports métier :**
* `IGame`
* `IPlayer`
* `IAction`
* `IActionPpc`
**Ports techniques :**
* `IConsole`
👉 Le domaine exprime **ce dont il a besoin**, sans connaître comment cest fait.
### 🔧 Adapters (Implémentations)
Les **adapters** sont les implémentations concrètes des ports.
**Adapters entrants (Driving Adapters) :**
* `GameRunnerConsole`
* Pilote le jeu depuis lUI console
* Traduit les actions utilisateur vers le domaine
**Adapters sortants (Driven Adapters) :**
* `ConsoleService`
* `InputActionFactory`
* `RandomActionFactory`
### 🧭 Flux des dépendances
✔ Les dépendances vont toujours **vers le domaine**<br/>
❌ Le domaine ne dépend jamais des adapters
```
UI / Infrastructure → Interfaces → Domaine
```
## 🧩 Bonnes pratiques et patterns appliqués
### 1. Single Responsibility Principle (SRP)
**Application :**
* Chaque classe a une responsabilité unique :
* logique métier
* affichage
* création dobjets
* accès à la console
**Pourquoi :**
* Code plus lisible
* Maintenance facilitée
* Changements localisés
### 2. Programmation orientée interfaces
**Application :**
* Interfaces génériques (`IGame`, `IPlayer`, `IAction`)
* Interfaces spécialisées par jeu (`IActionPpc`)
* Abstractions techniques (`IConsole`)
**Pourquoi :**
* Faible couplage
* Remplacement facile des implémentations
* Meilleure extensibilité
### 3. Dependency Inversion Principle (DIP)
**Application :**
* Le domaine dépend uniquement dabstractions
* Les implémentations concrètes sont injectées via des factories
**Pourquoi :**
* Indépendance technologique
* Testabilité accrue
* Code plus robuste
### 4. Factory Pattern
**Application :**
* `PierrePapierCiseauxGameFactory` pour créer un jeu complet
* Factories dactions (`InputActionFactory`, `RandomActionFactory`)
**Pourquoi :**
* Centralisation de la création dobjets
* Suppression de la logique dinstanciation du métier
* Facilite lévolution
### 5. Strategy Pattern
**Application :**
* Chaque action (Pierre, Papier, Ciseaux) est une stratégie distincte
* Les joueurs utilisent des comportements interchangeables
**Pourquoi :**
* Suppression des `switch` complexes
* Ajout de nouvelles actions sans modification du code existant
* Code plus propre et extensible
### 6. Open / Closed Principle (OCP)
**Application :**
* Extension par ajout de classes
* Aucun code existant modifié pour ajouter :
* un nouveau jeu
* une nouvelle action
**Pourquoi :**
* Réduction des risques de régression
* Code stable sur le long terme
### 7. Clean Architecture (approche simplifiée)
**Application :**
* Le domaine ne dépend ni :
* de lUI
* de la console
* du hasard
**Pourquoi :**
* Domaine réutilisable
* Structure claire
* Complément naturel de larchitecture hexagonale
### 8. Testabilité par design
**Application :**
* Interfaces partout
* Dépendances abstraites
* Console simulable
**Pourquoi :**
* Tests unitaires sans UI
* Scénarios déterministes
* Meilleure fiabilité du code
## 🏁 Conclusion
Même à léchelle dun mini-jeu console, cette architecture permet :
* un **code modulaire**
* une **évolution sans régression**
* une application concrète des principes **SOLID**
* une implémentation claire de l**architecture hexagonale**
👉 *MiniJeuxFinal* constitue une **base saine, extensible et pédagogique** en C#.
---
# 📚 Annexe Définitions
### Architecture Hexagonale (Ports & Adapters)
Architecture visant à isoler le cœur métier des détails techniques via des interfaces appelées ports, implémentées par des adapters.
### Single Responsibility Principle (SRP)
Une classe ne doit avoir quune seule raison de changer.
### Dependency Inversion Principle (DIP)
Les modules de haut niveau ne doivent pas dépendre des modules de bas niveau, mais dabstractions.
### Open / Closed Principle (OCP)
Une entité logicielle doit être ouverte à lextension mais fermée à la modification.
### Factory Pattern
Pattern de création qui délègue linstanciation dobjets à une classe dédiée.
### Strategy Pattern
Pattern comportemental qui encapsule des comportements interchangeables derrière une interface.
### Clean Architecture
Approche architecturale séparant le domaine métier des détails techniques.
---
Cette solution est un aperçu des bonnes pratiques mises en place.
```
MiniJeuxFinal/