====== 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]]