Inhaltsverzeichnis
Checklist Qualità Codice
Verifiche per convenzioni di nomenclatura, design delle funzioni, principio DRY e SSOT.
Questa checklist integra le Convenzioni di Codice con punti di verifica concreti.
Convenzioni di Nomenclatura
Pattern Namespace (Stile MS)
[ ] Nomi unit seguono WvdS.<Categoria>.<Componente>.pas [ ] Rispecchia la struttura Microsoft .NET con prefisso WvdS. [ ] Esempio: WvdS.UI.Controls.Button, WvdS.System.Logging
Gerarchia Classi (Stile Borland)
[ ] Base astratta usa prefisso TWvdSCustom* [ ] Base pubblica usa prefisso TWvdSBase* [ ] Classi concrete usano prefisso TWvdS* [ ] Pattern: TWvdSCustomXxx -> TWvdSBaseXxx -> TUserXxx
Prefissi Tipo
| Categoria | Prefisso | Esempio |
|---|---|---|
| Classi | TWvdS* | TWvdSRouter, TWvdSButton |
| Interfacce | IWvdS* | IWvdSActionResult, IWvdSBindable |
| Eccezioni | EWvdS* | EWvdSRoutingException |
| Record | TWvdS* | TWvdSBuildResult |
| Enum | TWvdS* | TWvdSProjectType |
| Callback | TWvdS* | TWvdSBuildCallback |
Nomenclatura Generale
[ ] Nomi descrittivi (nessuna singola lettera tranne cicli) [ ] Nessuna abbreviazione tranne quelle conosciute (URL, HTTP, JSON) [ ] Interfacce hanno GUID per container DI [ ] Campi privati: prefisso F* (FValue, FCount) [ ] Parametri: prefisso A* (AIndex, APath)
Design Funzioni
Linee Guida Dimensioni
[ ] 12-24 righe ideale [ ] Massimo 40 righe (oltre dividere) [ ] Profondità massima annidamento: 3
Linee Guida Parametri
[ ] Massimo 5-7 parametri [ ] Con più parametri: usare Record/Classe [ ] Parametri opzionali alla fine
Single Responsibility
[ ] Ogni funzione ha UN compito [ ] Il nome funzione descrive completamente il compito [ ] Se serve "e" nel nome -> dividere
Naming Verb-First
[ ] Get* - Recuperare valore [ ] Set* - Impostare valore [ ] Calculate* - Eseguire calcolo [ ] Process* - Eseguire elaborazione [ ] Validate* - Eseguire validazione [ ] Create* - Creare oggetto [ ] Parse* - Analizzare input [ ] Format* - Formattare output
Principio DRY
[ ] Nessun codice duplicato (più di 3 righe identiche -> estrarre) [ ] Nessun pattern copia-incolla [ ] Logica comune in funzioni helper [ ] Costanti invece di letterali ripetuti
Esempio: Correggere Violazione DRY
(* VIETATO - Codice duplicato *) procedure ProcessUserA(const AUser: TUser); begin if not ValidateEmail(AUser.Email) then raise EValidationError.Create('Invalid email'); if Length(AUser.Name) > 64 then raise EValidationError.Create('Name too long'); (* ... ulteriore elaborazione *) end; procedure ProcessUserB(const AUser: TUser); begin if not ValidateEmail(AUser.Email) then raise EValidationError.Create('Invalid email'); if Length(AUser.Name) > 64 then raise EValidationError.Create('Name too long'); (* ... altra elaborazione *) end; (* CORRETTO - Logica comune estratta *) procedure ValidateUser(const AUser: TUser); begin if not ValidateEmail(AUser.Email) then raise EValidationError.Create(rsInvalidEmail); if Length(AUser.Name) > MAX_NAME_LENGTH then raise EValidationError.Create(rsNameTooLong); end; procedure ProcessUserA(const AUser: TUser); begin ValidateUser(AUser); (* ... ulteriore elaborazione *) end;
Verifica SSOT
Single Source of Truth - Nessuna copia locale di codice comune!
Usare Librerie Common
[ ] API NodeJS via ~/sources/common/web/nodejs/
- NodeJS.FS, NodeJS.Path, NodeJS.ChildProcess
[ ] API VSCode via ~/sources/common/web/vscode/
- VSCode.Window, VSCode.Commands, VSCode.Workspace
[ ] WvdS Core via ~/sources/common/core/
- WvdS.System.Logging, WvdS.VSCode.Security
Vietato
[ ] Nessuna chiamata require() diretta nelle Extension [ ] Nessun duplicato di unit Common nelle Extension [ ] Nessuna implementazione wrapper locale
Esempio: Violazione SSOT
(* VIETATO - require() locale *) function FileExists(const APath: string): Boolean; begin asm var fs = require('fs'); (* Violazione SSOT! *) Result = fs.existsSync(APath); end; end; (* CORRETTO - Libreria Common *) uses NodeJS.FS; function FileExists(const APath: string): Boolean; begin Result := ExistsSync(APath); (* Da NodeJS.FS *) end;
Separation of Concerns
[ ] Logica UI solo in strato UI (extension_main, *Dialog) [ ] Logica business solo in strato Service (*Service) [ ] Strutture dati solo in strato Model (*Models) [ ] Services non chiamano API VSCode direttamente [ ] Models non contengono logica
Architettura a Strati
+-------------------------------------------------+ | UI Layer (extension_main.pas, *Dialog.pas) | | -> API VSCode, Interazione Utente | +-------------------------------------------------+ | Service Layer (*Service.pas) | | -> Logica Business, Validazione | +-------------------------------------------------+ | Model Layer (*Models.pas) | | -> Record, Tipi, Enum | +-------------------------------------------------+ | Infrastructure (NodeJS.*, VSCode.*, WvdS.*) | | -> API Esterne, Astrazione Piattaforma | +-------------------------------------------------+
Checklist Rapida da Copiare
Checklist Review (Qualità Codice): Naming: - [ ] Nomi unit: WvdS.<Categoria>.<Componente>.pas - [ ] Classi: prefisso TWvdS* - [ ] Interfacce: prefisso IWvdS* - [ ] Nomi descrittivi (nessuna abbreviazione) Funzioni: - [ ] 12-24 righe ideale, max 40 - [ ] Max 5-7 parametri - [ ] Single Responsibility - [ ] Naming Verb-First DRY: - [ ] Nessun codice duplicato - [ ] Logica comune estratta - [ ] Costanti invece di letterali SSOT: - [ ] Librerie Common usate - [ ] Nessuna chiamata require() locale - [ ] Nessun duplicato di unit Common SoC: - [ ] UI solo in strato UI - [ ] Logica solo in strato Service - [ ] Services senza chiamate VSCode dirette
Vedi anche
Zuletzt geändert: il 30/01/2026 alle 01:36