meta données pour cette page
  •  

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
certif:procedure:usageclasseinterface [2026/04/24 13:40] – créée nicolascertif:procedure:usageclasseinterface [2026/04/24 17:04] (Version actuelle) alexia
Ligne 1: Ligne 1:
 +|{{:undo-2.svg?30|}}| [[certif:procedure:develop:angular]]|
 +|{{:connexe.jpg?40|}} **Sujets connexes**|   |
 ====== Règles sur les classes ====== ====== Règles sur les classes ======
-**Version : 04-2023**+|**Suivi des modifications majeures** |04/2065 Nicolas MARCHAND - Création| 
 +|**Suivi des approbations** |Cartographie fonctionnelle| 
 +|**Objet** |Normaliser les classes servant à mapper dans Angular les objets du back (/ de la BDD)| 
 +|**Destinataires** |**- Validation des modifications : ** Chef de projet\\  **- Approbation du document** : Tous développeurs| 
 +======  ======
  
-===== Nommage des classes de donnée (modèle) =====+===== Nommage des classes de donnée (modele) =====
  
-==== Classe correspondant à une table des BDDs ====+Classe correspondant à
  
-Élément ^ Règle ^ Exemple +Correspondance ^ Règle de nommage 
-Préfixe | TSQL + nom de la table TSQLPersonne +une table des BDDs Dans ce cas le nom doit être celui de la classe pascal. Soit TSQL + nom de la table dans la base. Exemples : TSQLPersonneTSQLFamille …  Pour facilité le fichier s'appelle record + nom de la classe (a l'image du back). Il est stocké dans ''ngx-logeasweb-ui\src\lib\models\BDD\Nom bdd\'' | 
-| Type | Classe représentant une table BDD | TSQLFamille +à une classe interne au front | On préfixe le nom de la lettre suivi d'un nom parlant. NB : on ne crée pas une classe copie d'une classe TSQL, si on a besoin d'ajouter des éléments on utilise l'héritage (extends\\ Exemple : ''TPersonnePlus extends TSQLPersonne { nomDeJeuneFille : string ...}'' \\ ou on ajoute une propriété à la classe de base calculée \\ Exemple ''getNomComplet(){return `${this.titre} ${this.prenom} ${this.nom}`}'' \\ Si la classe est à usage unique du composant on pourra utiliser une Interface | 
-| Nom du fichier record + nom de la classe | recordTSQLPersonne | +| classes dérivées pour affichage | En fait il ne s'agit pas de classe mais d'interface (pas de fonction de traitement). Le nommage se fait sur le nom de la table plus Grid \\ Exemple : ''IPersonneGrid'' corresponds au type ''TSQLPersonne'' mis à plat pour usage dans la grille |
-| Emplacement | ngx-logeasweb-ui\src\lib\models\BDD\NomBDD\ | — | +
- +
---- +
- +
-==== Classe interne au front ==== +
- +
-^ Règle ^ Description ^ Exemple ^ +
-Préfixe | Lettre **T** suivie dun nom parlant | TPersonnePlus | +
-| Extension | Utiliser l’héritage plutôt qu’une copie | extends TSQLPersonne | +
-| Propriété calculée | Ajouter une méthode de calcul | getNomComplet() +
-| Usage unique | Utiliser une interface | Interface locale | +
- +
-Exemple : +
- +
-<code typescript> +
-class TPersonnePlus extends TSQLPersonne { +
-  nomDeJeuneFille: string+
-} +
-</code> +
- +
-Exemple propriété calculée : +
- +
-<code typescript> +
-getNomComplet() { +
-  return `${this.titre} ${this.prenom} ${this.nom}`+
-+
-</code> +
- +
---- +
- +
-==== Classes dérivées pour affichage ==== +
- +
-^ Type ^ Règle ^ Exemple ^ +
-Nature | Interface uniquement (pas de logique| — | +
-| Nommage | Nom de la table Grid IPersonneGrid +
-| Utilisation | Type mis à plat pour une grille | DataGrid | +
- +
----+
  
 ===== Les classes issues des BDDs (TSQL…) ===== ===== Les classes issues des BDDs (TSQL…) =====
Ligne 53: Ligne 21:
 ==== Quelques règles génériques ==== ==== Quelques règles génériques ====
  
-^ Règle ^ Description ^ +  * On ne charge les données depuis le back directement depuis le code mais uniquement au travers des fonctions de la classe afin d'avoir des comportements homogènes 
-| Chargement | Toujours via les fonctions de la classe | Comportement homogène | +  Une classe **NE DOIT PAS APPELER** une autre classe de typage, si c'est le cas c'est le service qui doit le faire. \\ Exemple : pour effacer une famille il faut vérifier les personnes donc on devrait importer TSQPersonne dans recordFamille et réciproquement — on aurait donc ''TSQLFamille'' qui appelle une méthode de ''TSQLPersonne'' et réciproquement =à mettre dans un service. 
-| Couplage | Une classe ne doit pas appeler une autre classe métier | Utiliser un service +  * Vu les problématiques à respecter la syntaxe ou privilégiera TSQLFamille[] à créer y=une classe TSQLFamilles
-| Logique transverse | Centralisée dans un service | Vérifications croisées | +
- +
-Exemple interdit : +
- +
-<code> +
-TSQLFamille appelle TSQLPersonne +
-TSQLPersonne appelle TSQLFamille +
-</code> +
- +
-⇒ À gérer dans un **service** +
- +
---- +
- +
-===== Fonctions normées correspondant au CRUD ===== +
- +
-==== READ ==== +
- +
-Nom de la fonction : +
- +
-<code> +
-chargeFromBDD$ +
-</code> +
- +
-Signature : +
- +
-<code typescript> +
-static async chargeFromBDD$( +
-  filtre: TSQLPersonne = new TSQLPersonne(), +
-  base?: TBaseLoGeAs +
-): Promise<TSQLPersonne[]> +
-</code> +
- +
-^ Paramètre ^ Type ^ Description ^ +
-| filtre | Objet modèle | Permet de sélectionner un sous-ensemble | +
-| base | TBaseLoGeAs | Base alternative optionnelle | +
- +
-Exemple : +
- +
-<code typescript> +
-this.personnes = await TSQLPersonne.chargeFromBDD$(); +
-</code> +
- +
---- +
- +
-==== Utilisation du filtre ==== +
- +
-<code typescript> +
-const filtre = new TSQLPersonne({ +
-  Codepostal: "31800" +
-}); +
- +
-this.personnes = await TSQLPersonne.chargeFromBDD$(filtre); </code> +
- +
-Résultat attendu : +
- +
-uniquement les personnes ayant le code postal 31800 +
- +
---- +
- +
-==== CREATE / UPDATE ==== +
- +
-Nom de la fonction : +
- +
-<code> +
-sauveToBDD$ +
-</code> +
- +
-Signature : +
- +
-<code typescript> +
-async sauveToBDD$(base?: TBaseLoGeAs) +
-</code> +
- +
-^ Cas ^ Condition ^ Action ^ +
-| Création | ID = 0 | Insertion en base | +
-| Mise à jour | ID ≠ 0 | Update en base | +
-| Préparation | Aucune | Gérée par la méthode | +
- +
---- +
- +
-==== DELETE ==== +
- +
-Nom de la fonction : +
- +
-<code> +
-effaceToBDD$ +
-</code> +
- +
-Signature : +
- +
-<code typescript> +
-async effaceToBDD$( +
-  ID: number, +
-  base?: TBaseLoGeAs +
-+
-</code> +
- +
-^ Paramètre ^ Type ^ Description ^ +
-| ID | number | Identifiant de l'objet | +
-| base | TBaseLoGeAs | Base optionnelle |+
  
----+==== Les fonctions « normées » correspondant au CRUD ==== 
 +^ Opération ^ Fonction ^ Description ^ 
 +| READ | ''chargeFromBDD$'' | ''static async chargeFromBDD$(filtre:TSQLPersonne=new TSQLPersonne(), base?:TBaseLoGeAs) : Promise<TSQLPersonne[]>'' \\ C'est la procédure qui doit se charger de toutes les transformations nécessaires après la réception (appel de la fonction générique ''mapArrayTo'' qui appelle ''corrigeDataFromBDD''). \\ ''static'' permet d'appeler la fonction sans instance de la classe. \\ Exemple : ''this.personnes = await TSQLPersonne.chargeFromBDD$();'' \\ Le filtre permet de demander à la BDD un sous-ensemble de la table. \\ Exemple : ''const filtre = new TSQLPersonne({Codepostal: "31800"}) ; this.personnes = await TSQLPersonne.chargeFromBDD$(filtre);'' \\ → on ne devrait avoir que les personnes ayant un codepostal = 31800 (A TESTER) \\ ''base'' peut être laissé vide si on utilise la base chargée dans DG, sinon il faut bien sûr l'indiquer (possibilité de charger une deuxième base) | 
 +| CREATE / UPDATE | ''sauveToBDD$'' | ''async sauveToBDD$(base?:TbaseLoGeAs)'' \\ Permet de créer (ID=0) ou de mettre à jour l'objet instancié dans la base de données. Aucune préparation ne doit être faite avant, c'est la procédure qui s'en charge. \\ ''base'' peut être laissé vide si on utilise la base chargée dans DG, sinon il faut bien sûr l'indiquer (possibilité de charger une deuxième base) | 
 +| DELETE | ''effaceToBDD$'' | ''async effaceToBDD$(base?:TbaseLoGeAs)'' |
  
-===== Tableau récapitulatif du CRUD =====+==== Les fonctions « normées » à usage interne de la classe ("protected"==== 
 +^Nom de la fonction^Usage^ 
 +|protected override corrigeDataFromBDD()|Appelé sur chaque enregistrement lors du chargement depuis le back, via la procédure  MapUtils.mapArrayTo. Elle permet de corriger, mapper.. les données sur le modèle de la classe. Elle permet en outre de s'affranchir des problèmes de case entre back et front| 
 +|protected override async prepareDataToBDD()|Appelé par la fonction sauveToBDD$ elle permet de mettre les format angular au format attendu par le back|
  
-Opération Méthode ^ Type ^ Description +==== Les fonctions « normées » à usage public ==== 
-READ | chargeFromBDD$ | static async | Charge une liste d'objets depuis la base | +^Nom de la fonction^Usage
-| CREATE | sauveToBDD$ | async | Crée un objet | +|override toGrid():IFamilleGrid|Met à plat la structure parente (champ personnalisé, sous structure...) afin de faciliter leur affichage dans les grilles\\ Peut permettre au passage à ajouter des champs calculé\\ **Attention :** la structure résultante est une Interface elle ne peut/doit pas servir pour interfacer avec le back ou autre
-| UPDATE | sauveToBDD$ | async | Met à jour un objet +|static toGrids(liste:TSQLFamille[]):IFamilleGrid[]|Boucle sur les éléments du tableau pour appelé togrid|
-DELETE | effaceToBDD$ | async Supprime un objet |+
  
 +==== Les fonctions spécifique à la classe ====
 +Dépends de chaque classe voir la classe