RFC-001 --- Extraction du Bounded Context Municipal Management
Statut
Proposée
Objectif
Extraire le métier municipal du module historique Mairie afin
d'obtenir une séparation claire entre :
- le territoire ;
- l'organisation municipale ;
- les opérations municipales.
Cette RFC ne crée pas MairieSuite.
Elle prépare DMV Core à accueillir MairieSuite sans faire de cette future application le propriétaire du métier.
Contexte
L'analyse de l'existant a montré que le module Mairie mélange
aujourd'hui plusieurs responsabilités :
- identité territoriale ;
- identité organisationnelle de la mairie ;
- données métier municipales ;
- opérations municipales ;
- logique de publication.
Cette situation entraîne :
- des écritures croisées ;
- des dépendances directes ;
- une confusion des responsabilités ;
- une difficulté d'évolution.
L'ADR-014 interdit désormais cette organisation.
Décision
Le métier municipal devient un Bounded Context autonome :
Municipal Management
Il est propriétaire exclusivement des capacités métier municipales.
Il référence :
TerritoryActor
sans en devenir propriétaire.
Ownership
Municipal Management possède :
- élus ;
- collectes ;
- informations pratiques ;
- services municipaux ;
- alertes municipales ;
- toutes les futures capacités propres à la gestion municipale.
Il ne possède jamais :
- la commune ;
- le code INSEE ;
- le territoire ;
- la mairie comme organisation.
Références
Chaque enregistrement municipal référence :
territory_id
actor_id
Le territoire reste indépendant.
La mairie reste un acteur.
Responsabilités
Municipal Management décide :
- qu'un élu est publié ;
- qu'une collecte est active ;
- qu'une information pratique change ;
- qu'une alerte municipale existe.
Il ne décide pas :
- de la diffusion publique ;
- des notifications ;
- de l'indexation ;
- des permissions génériques.
Contrats publiés
Exemples :
GetMunicipalServices
GetMunicipalInformations
GetMunicipalOfficials
GetMunicipalCollections
GetMunicipalAlerts
Événements publiés
Exemples :
MunicipalAlertPublished
MunicipalAlertUpdated
MunicipalOfficialUpdated
MunicipalCollectionUpdated
MunicipalInformationUpdated
Ces événements décrivent uniquement des faits municipaux.
Relations
Territory
Lecture uniquement.
Municipal Management ne modifie jamais le territoire.
Actor
Lecture uniquement.
Municipal Management ne modifie jamais l'identité de la mairie.
Publication
Lorsqu'une information municipale devient publique, Municipal Management publie un événement.
Publication décide :
- comment le contenu est diffusé ;
- où il apparaît ;
- sous quelle forme.
Authorization
Municipal Management expose ses politiques.
Authorization ne fait que les appliquer.
Conséquences
Le module historique Mairie disparaît progressivement.
Mairie
↓
Territory
+
Actor
+
Municipal Management
Hors périmètre
Cette RFC ne traite pas :
- MairieSuite ;
- l'interface Workspace ;
- les permissions ;
- les publications ;
- les notifications ;
- la migration SQL.
Elle ne traite que les frontières métier.
Migration
La migration doit être incrémentale.
Étape 1
Créer le nouveau contexte.
Aucun comportement modifié.
Étape 2
Déplacer progressivement :
- élus ;
- collectes ;
- informations pratiques ;
- services municipaux.
Étape 3
Déplacer les alertes.
Supprimer acteur_alertes.
Étape 4
Supprimer le module historique Mairie.
Risques
Les dépendances sont identifiées.
Le principal risque est de conserver des écritures croisées pendant la transition.
Critères de succès
La RFC est terminée lorsque :
- aucune logique métier municipale ne subsiste dans
Mairie; - Territory ne possède plus aucune logique municipale ;
- Actor ne possède plus aucune logique municipale ;
- toutes les opérations municipales passent par Municipal Management ;
- les publications municipales transitent par des contrats ou des événements ;
acteur_alertesa disparu ;- aucune écriture croisée ne subsiste.
Rollback
Chaque étape est indépendante.
Le rollback consiste à revenir au commit précédent de la migration concernée.
Aucune étape ne doit rendre impossible le retour en arrière.
Structure recommandée des futures RFC
Chaque RFC devrait comporter trois parties :
- Le problème : pourquoi l'architecture actuelle n'est plus satisfaisante.
- La décision : ce qui est retenu et pourquoi.
- Le plan de migration : comment mettre en œuvre la décision de manière incrémentale.