====== Checklist Qualità Codice ====== Verifiche per convenzioni di nomenclatura, design delle funzioni, principio DRY e SSOT. Questa checklist integra le [[.:code-konventionen|Convenzioni di Codice]] con punti di verifica concreti. ===== Convenzioni di Nomenclatura ===== ==== Pattern Namespace (Stile MS) ==== [ ] Nomi unit seguono WvdS...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...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 ===== * [[.:qualitaetssicherung|Panoramica Garanzia Qualità]] * [[.:code-konventionen|Convenzioni di Codice]] * [[.:audit-core|Checklist Core]] * [[.:extension-entwicklung|Sviluppo Extension]]