Structure modulaire APS
Organisation modulaire de la plateforme APS : découpage en modules fonctionnels, dépendances et responsabilités.
Vue d'ensemble
L'architecture APS est organisée en modules distincts regroupés par domaine fonctionnel. Cette organisation modulaire apporte plusieurs avantages :
- Séparation des responsabilités : Chaque module a un périmètre fonctionnel clair
- Réutilisabilité : Les modules peuvent être utilisés dans différents contextes (Web, Studio, Agents)
- Maintenabilité : Modifications isolées sans impact global
- Testabilité : Tests unitaires ciblés par module
Modules principaux
Kernel
Namespace : Avanteam.Kernel.*
Dossier : /Kernel/
Le Kernel constitue le socle technique de l'application. Il ne contient aucune logique métier et fournit des services transversaux utilisés par tous les autres modules.
Sous-modules :
Kernel: Core du kernel (configuration, logging, mail)Kernel.DependencyInjection: Infrastructure d'injection de dépendancesKernel.Configuration: Lecture et gestion de la configurationKernel.Data: Abstraction d'accès aux donnéesKernel.Parameters: Gestion des paramètres applicatifsKernel.AspNetCore: Extensions pour ASP.NET CoreKernel.Web: Extensions pour ASP.NET FrameworkKernel.Office: Intégration Office (Word, Excel)Kernel.MicrosoftGraph: Intégration Microsoft Graph
Dépendances : Aucune (module de base)
Responsabilités :
- Configuration centralisée (fichiers .ini, appsettings.json)
- Journalisation (NLog)
- Envoi d'emails
- Abstraction base de données
- Services de fond (background tasks)
Directory
Namespace : Avanteam.Directory.*
Dossier : /Directory/
Le module Directory gère tout ce qui concerne l'annuaire, les utilisateurs et l'authentification.
Sous-modules :
Directory: Core du module annuaireDirectory.Api: API publique du moduleDirectory.Identity: Modèle Identity (utilisateurs, rôles, ressources)Directory.Authentication: Mécanismes d'authentificationDirectory.Authentication.AspNetCore: Authentification ASP.NET CoreDirectory.Authentication.Cookies: Authentification par cookiesDirectory.Authentication.Saml2: Authentification SAML
Directory.Authorization: Gestion des autorisationsDirectory.Synchronization: Synchronisation Active Directory / LDAPDirectory.Repository: Accès aux données annuaireDirectory.Web: Extensions web pour l'annuaireDirectory.UI: Composants UI pour l'annuaire
Dépendances : Kernel
Responsabilités :
- Gestion des utilisateurs, groupes, ressources
- Authentification (Forms, Windows, SAML, OAuth)
- Autorisation et politiques de sécurité
- Synchronisation avec annuaires externes (AD, LDAP)
- Gestion des délégations
Application
Namespace : Avanteam.Application.*
Dossier : /Application/
Le module Application contient la logique métier centrale de la plateforme.
Sous-modules :
Application: Core du module applicatifApplication.Api: API publique du moduleApplication.Agents: Système d'agents (tâches planifiées)Application.Archives: Gestion de l'archivageApplication.Log: Journalisation métierApplication.Modules: Modules métier spécifiquesApplication.Repository: Accès aux données métierApplication.Repository.EFCore: Implémentation Entity Framework CoreApplication.Repository.EFCore.SqlServer: Provider SQL ServerApplication.Repository.EFCore.Oracle: Provider Oracle
Application.Web: Extensions webApplication.WebControls: Contrôles web réutilisables
Dépendances : Kernel, Directory
Responsabilités :
- Gestion des documents et métadonnées
- Gestion des formulaires et schémas
- Gestion des vues et requêtes
- Agents et tâches planifiées
- Archivage documentaire
- Logs métier et audit
ApplicationPool
Namespace : Avanteam.Application.Pool.*
Dossier : /ApplicationPool/
Le module ApplicationPool gère le concept de pool d'applications et le multi-tenant.
Sous-modules :
ApplicationPool: Core du poolApplicationPool.Api: API du poolApplicationPool.Repository: Accès aux données du pool
Dépendances : Kernel, Directory, Application
Responsabilités :
- Gestion des profils d'applications
- Configuration multi-tenant
- Isolation des données par application
Workflow
Namespace : Avanteam.Workflow.*
Dossier : /Workflow/
Le module Workflow fournit le moteur de workflow de la plateforme.
Sous-modules :
Workflow: Core du moteur de workflowWorkflow.ComponentModel: Modèle de composants workflowWorkflow.Runtime: Exécution des workflowsWorkflow.DataSource: Accès aux données workflow
Dépendances : Kernel, Directory, Documents
Responsabilités :
- Définition des processus métier
- Exécution des instances de workflow
- Gestion des états et transitions
- Actions automatiques et notifications
Formulars
Namespace : Avanteam.Formulars.*
Dossier : /Formulars/
Le module Formulars gère la conception et le rendu des formulaires.
Sous-modules :
Formulars: Core des formulairesFormulars.Designer: Éditeur de formulairesFormulars.Schema: Schémas de formulairesFormulars.UI: Rendu UI des formulaires
Dépendances : Kernel, Application
Responsabilités :
- Définition des schémas de formulaires
- Rendu dynamique des formulaires
- Validation des données
- Types de champs personnalisés
Views
Namespace : Avanteam.Views.*
Dossier : /Views/
Le module Views gère l'affichage tabulaire des données et les requêtes.
Dépendances : Kernel, Application
Responsabilités :
- Exécution de requêtes SQL/Entity
- Filtrage et tri des données
- Export vers Excel/CSV
- Vues personnalisées par utilisateur
Documents
Namespace : Avanteam.Documents.*
Dossier : /Documents/
Le module Documents gère les documents et pièces jointes.
Dépendances : Kernel
Responsabilités :
- Stockage des fichiers
- Gestion des versions
- Conversion PDF
- Check-in/Check-out
Studio
Namespace : Avanteam.Studio.*
Dossier : /Studio/
Le module Studio contient l'outil de configuration desktop (WinForms).
Sous-modules :
Studio.Main: Application principaleStudio.Core: Core du studioStudio.Security: Sécurité du studioStudio.Modules.*: Modules de configurationStudio.Modules.Formulars: Configuration des formulairesStudio.Modules.Parameters: Configuration des paramètresStudio.Modules.Views: Configuration des vuesStudio.Modules.Workflow: Configuration des workflows
Dépendances : Kernel, Directory, Application, tous les modules métier
Responsabilités :
- Modélisation des formulaires
- Édition des workflows
- Configuration des vues
- Gestion des paramètres applicatifs
Web
Namespace : Avanteam.Web.*
Dossier : /Web/
Le module Web contient les applications web.
Sous-modules :
Web.Model: Application web principale (ASP.NET Framework 4.8)Web.Root: Nouvelle application (ASP.NET Core - en développement)
Dépendances : Tous les modules
Responsabilités :
- Interface utilisateur web
- API REST
- SignalR (temps réel)
- Gestion de session
Modules complémentaires
Localisation : Gestion multilingue
Remoting : Communication inter-process
Reporting : Génération de rapports
Search : Recherche plein texte
SharePoint : Intégration SharePoint
Exchange : Intégration Exchange
GraphBuilder : Construction de graphes visuels
Navigators : Navigation visuelle
Organisation des projets
Chaque module suit une structure standardisée :
Module/
├── Abstractions/ # Interfaces et abstractions
├── Api/ # API publique du module
├── DependencyInjection/ # Configuration DI
├── Repository/ # Accès aux données
├── Src/ # Implémentation principale
├── UnitTests/ # Tests unitaires
└── Web/ # Extensions web (si applicable)
Pattern de nommage
- Projet :
{Module}.{SubModule} - Namespace :
Avanteam.{Module}.{SubModule} - Assembly :
Avanteam.{Module}.{SubModule}.dll
Exemple : Application.Repository.EFCore.SqlServer
Graphe de dépendances
┌─────────────────────────────────────────────┐
│ Studio │
│ (Configuration) │
└──────────────────┬──────────────────────────┘
│
┌──────────────────▼──────────────────────────┐
│ Web.Model │
│ (Application Web) │
└──────────────────┬──────────────────────────┘
│
┌──────────┼──────────┐
│ │ │
┌───────▼────┐ ┌──▼────────┐ ┌▼──────────────┐
│ Workflow │ │Application│ │ApplicationPool│
└──────┬─────┘ └──┬────────┘ └┬──────────────┘
│ │ │
└──────┬───┴────────────┘
│
┌──────▼──────┐
│ Directory │
└──────┬──────┘
│
┌──────▼──────┐
│ Kernel │
└─────────────┘
Stratégie de versionnage
- Tous les projets partagent le même numéro de version
- Version définie dans
Directory.Build.propsà la racine - Format :
{Année}.{Mois}.{Build}.{Revision} - Exemple :
2023.1.0.0
<PropertyGroup>
<Version Condition="'$(VERSION)' == ''">1.0.0.0</Version>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
</PropertyGroup>
Gestion des dépendances
Dépendances internes
Les dépendances entre modules APS s'effectuent via ProjectReference :
<ItemGroup>
<ProjectReference Include="..\..\Kernel\Src\Kernel.csproj" />
<ProjectReference Include="..\..\Directory\Src\Directory.csproj" />
</ItemGroup>
Dépendances externes
Les packages NuGet externes sont centralisés et gérés de manière cohérente :
- Entity Framework Core
- AutoMapper
- NLog
- DevExpress (composants UI)
- Microsoft.Extensions.*
Règles de dépendances
- Kernel ne dépend de rien : Module de base autonome
- Pas de dépendances circulaires : Graphe acyclique
- Abstractions séparées : Interfaces dans modules
*.Abstractions - API publique isolée : Contrats dans modules
*.Api
Extension et personnalisation
Système de plugins
L'architecture supporte l'extension via le système AddStartupExtensions :
apsAppBuilder.AddStartupExtensions("MonModule");
Cette méthode recherche et exécute automatiquement toutes les classes implémentant IStartupExtension dans les assemblies du module.
Modules personnalisés
Pour créer un module personnalisé :
- Créer la structure de dossiers standard
- Implémenter une classe
Startupavec méthode d'extension - Enregistrer les services via
IServiceCollection - Référencer les modules dépendants
- Appeler la méthode d'extension dans le point d'entrée
Compilation et build
Configuration globale
Le fichier Directory.Build.props à la racine définit les paramètres communs :
- Target Framework (.NET Framework 4.8)
- Chemins de sortie (Build/Debug ou Build/Release)
- Warnings et analyses de code
- Métadonnées d'assembly
Scripts de build
- npm scripts : Compilation frontend (webpack, gulp)
- MSBuild : Compilation .NET
- Publish : Publication vers serveur IIS
Bonnes pratiques
Organisation du code
- Un fichier par classe
- Namespaces cohérents avec la structure de dossiers
- Interfaces dans projets
Abstractions - Implémentation dans projets
Src
Enregistrement des services
Chaque module expose une méthode d'extension fluide :
public static IApsAppBuilder AddMonModule(
this IApsAppBuilder builder)
{
AddServices(builder.Services);
return builder.AddStartupExtensions("MonModule");
}
Tests unitaires
Chaque module a son projet UnitTests correspondant avec la même structure.