Template de console .NET 10 avec architecture modulaire App/Page, navigation clavier unifiee, data-access en couches (Repository/Service), et gestion d'erreurs standardisee via AppError.
Le projet suit maintenant ce modele:
- Un
Routerracine (app principale). - Des apps enfants (ex:
OuvragesApp,TextEditorApp) en hierarchie recursive illimitee. - Chaque app expose ses
SettingsetInfoau niveau racine de l'app (pas sur chaque page). - Les pages internes d'une app servent uniquement au flux metier (CRUD, recherche, etc.).
q: quitte uniquement depuis le menu principal (Router).qdans les autres pages: retour en arriere.Ctrl+B: retour force vers la page precedente. Si aucun retour possible, message d'avertissement puis retour a la racine de page.Ctrl+H: retour accueil (Router).
- Les pages de parametres lisent maintenant une ligne complete pour la selection:
10,11, etc. sont supportes. - Si la valeur d'un setting est un bool (
true/false), choisir son numero inverse directement la valeur. - Les confirmations "Appuyez sur Entree" apres edition ont ete retirees pour rendre le flux plus rapide.
- Les parametres MongoDB sont exposes dans le scope
Router(plus dans un menu legacy deCMSCore). - Les modifications de settings sont persistantes (sauvegarde immediate).
Template Menu Web Console/
|- Program.cs
|- Template Menu Web Console.csproj
|- Core/
| |- CMSCore.cs
| |- App.cs
| |- Helpers.cs
| |- UIComponents/
| | |- MenuPage.cs
| | |- MenuChar.cs
| | |- SettingsComponent.cs
| |- DataAccess/
| |- Errors/
| |- Results/
| \- Identity/
|- UserApps/
| |- Router.cs
| |- App/OuvragesApp.cs
| |- TextEditorApp.cs
| |- Classes/
| \- Repository/
\- doc/
|- OuvragesApp-guide.md
|- data-access-architecture.md
|- error-guidelines.md
\- summary-guidelines.md
Program.cs compose le graphe d'apps:
CMSCore app = new();
var OuvragesApp = new OuvragesApp(app);
var textEditorApp = new TextEditorApp(app);
var router = new Router(app, OuvragesApp, textEditorApp);
app.RegisterUserMainMenu(() => router.ShowMainMenu());
app.RegisterChildApp(router);
app.RunApp();- Toute app derive de
App. - Les apps peuvent enregistrer des sous-apps via
RegisterSubApp. - Les ecrans settings/info scopes sont fournis par
App:ShowScopedSettingsPage(...)ShowScopedInfoPage(...)
GetSettingsEntries()etGetInfoLines()sont agreges recursivement (self + descendants).
- Entites: classes metier avec
[IsId]. - Repositories: derivent de
RepositoryBase<TEntity>. - Services:
JsonFileService<TEntity>ouMongoDBService<TEntity>. - Retour d'erreurs attendues:
Result/Result<T>avecAppError.
Voir doc/data-access-architecture.md pour les details.
- Les erreurs metier/techniques significatives doivent etre representees en
AppError. - Les
AppErrorsont loggees de maniere uniforme et affichables en UI. - Eviter les exceptions brutes dans le flux normal.
Voir doc/error-guidelines.md pour les conventions completes.
Depuis Template Menu Web Console/:
dotnet buildF5utilise un launchcoreclrenexternalTerminal.- Avant lancement, VS Code execute la task
clean-build-template-menu:dotnet cleandotnet build
- Si une session debug est deja active, utiliser
Ctrl+Shift+F5pour un restart propre.