Inhaltsverzeichnis
Kontrolna lista kvalitete koda
Provjere za konvencije imenovanja, dizajn funkcija, DRY-princip i SSOT.
Ova kontrolna lista dopunjuje Konvencije koda s konkretnim točkama provjere.
Konvencije imenovanja
Namespace-Pattern (MS-stil)
[ ] Nazivi unit-a prate WvdS.<Kategorija>.<Komponenta>.pas [ ] Odražava Microsoft .NET strukturu s WvdS. prefiksom [ ] Primjer: WvdS.UI.Controls.Button, WvdS.System.Logging
Hijerarhija klasa (Borland-stil)
[ ] Apstraktna baza koristi TWvdSCustom* prefiks [ ] Javna baza koristi TWvdSBase* prefiks [ ] Konkretne klase koriste TWvdS* prefiks [ ] Obrazac: TWvdSCustomXxx → TWvdSBaseXxx → TUserXxx
Prefiksi tipova
| Kategorija | Prefiks | Primjer |
|---|---|---|
| Klase | TWvdS* | TWvdSRouter, TWvdSButton |
| Sučelja | IWvdS* | IWvdSActionResult, IWvdSBindable |
| Iznimke | EWvdS* | EWvdSRoutingException |
| Zapisi | TWvdS* | TWvdSBuildResult |
| Enumeracije | TWvdS* | TWvdSProjectType |
| Callback-ovi | TWvdS* | TWvdSBuildCallback |
Opće imenovanje
[ ] Opisna imena (bez pojedinačnih slova osim u petljama) [ ] Bez kratica osim poznatih (URL, HTTP, JSON) [ ] Sučelja imaju GUID za DI-container [ ] Privatna polja: F* prefiks (FValue, FCount) [ ] Parametri: A* prefiks (AIndex, APath)
Dizajn funkcija
Smjernice za veličinu
[ ] 12-24 linije idealno [ ] Maksimalno 40 linija (iznad toga podijeliti) [ ] Maksimalna dubina ugniježđenja: 3
Smjernice za parametre
[ ] Maksimalno 5-7 parametara [ ] Kod više parametara: koristi Record/Klasu [ ] Opcionalni parametri na kraju
Single Responsibility
[ ] Svaka funkcija ima JEDAN zadatak [ ] Naziv funkcije potpuno opisuje zadatak [ ] Ako je "i" potreban u nazivu → podijeliti
Verb-First imenovanje
[ ] Get* - Dohvati vrijednost [ ] Set* - Postavi vrijednost [ ] Calculate* - Izvrši izračun [ ] Process* - Izvrši obradu [ ] Validate* - Izvrši validaciju [ ] Create* - Stvori objekt [ ] Parse* - Parsiraj unos [ ] Format* - Formatiraj izlaz
DRY-princip
[ ] Bez dupliciranog koda (više od 3 identične linije → ekstrahiraj) [ ] Bez copy-paste obrazaca [ ] Zajednička logika u pomoćnim funkcijama [ ] Konstante umjesto ponovljenih literala
Primjer: Ispravak DRY-kršenja
(* ZABRANJENO - Duplicirani kod *) 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'); (* ... daljnja obrada *) 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'); (* ... druga obrada *) end; (* ISPRAVNO - Zajednička logika ekstrahirana *) 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); (* ... daljnja obrada *) end;
SSOT-provjera
Single Source of Truth - Bez lokalnih kopija Common-koda!
Korištenje Common Libraries
[ ] NodeJS-API-ji preko ~/sources/common/web/nodejs/
- NodeJS.FS, NodeJS.Path, NodeJS.ChildProcess
[ ] VSCode-API-ji preko ~/sources/common/web/vscode/
- VSCode.Window, VSCode.Commands, VSCode.Workspace
[ ] WvdS Core preko ~/sources/common/core/
- WvdS.System.Logging, WvdS.VSCode.Security
Zabranjeno
[ ] Bez direktnih require()-poziva u ekstenzijama [ ] Bez duplikata Common-unit-a u ekstenzijama [ ] Bez lokalnih wrapper-implementacija
Primjer: SSOT-kršenje
(* ZABRANJENO - Lokalni require() *) function FileExists(const APath: string): Boolean; begin asm var fs = require('fs'); (* SSOT-kršenje! *) Result = fs.existsSync(APath); end; end; (* ISPRAVNO - Common Library *) uses NodeJS.FS; function FileExists(const APath: string): Boolean; begin Result := ExistsSync(APath); (* Iz NodeJS.FS *) end;
Separation of Concerns
[ ] UI-logika samo u UI-sloju (extension_main, *Dialog) [ ] Poslovna logika samo u Service-sloju (*Service) [ ] Strukture podataka samo u Model-sloju (*Models) [ ] Servisi ne pozivaju direktno VSCode-API-je [ ] Modeli ne sadrže logiku
Slojevita arhitektura
┌─────────────────────────────────────────────────┐ │ UI Layer (extension_main.pas, *Dialog.pas) │ │ → VSCode API-ji, User Interaction │ ├─────────────────────────────────────────────────┤ │ Service Layer (*Service.pas) │ │ → Poslovna logika, Validacija │ ├─────────────────────────────────────────────────┤ │ Model Layer (*Models.pas) │ │ → Records, Tipovi, Enumeracije │ ├─────────────────────────────────────────────────┤ │ Infrastructure (NodeJS.*, VSCode.*, WvdS.*) │ │ → Vanjski API-ji, Platform-Apstrakcija │ └─────────────────────────────────────────────────┘
Brza kontrolna lista za kopiranje
Kontrolna lista pregleda (Kvaliteta koda): Imenovanje: - [ ] Nazivi unit-a: WvdS.<Kategorija>.<Komponenta>.pas - [ ] Klase: TWvdS* prefiks - [ ] Sučelja: IWvdS* prefiks - [ ] Opisna imena (bez kratica) Funkcije: - [ ] 12-24 linije idealno, max 40 - [ ] Max 5-7 parametara - [ ] Single Responsibility - [ ] Verb-First imenovanje DRY: - [ ] Bez dupliciranog koda - [ ] Zajednička logika ekstrahirana - [ ] Konstante umjesto literala SSOT: - [ ] Common Libraries korištene - [ ] Bez lokalnih require()-poziva - [ ] Bez duplikata Common-unit-a SoC: - [ ] UI samo u UI-sloju - [ ] Logika samo u Service-sloju - [ ] Servisi bez direktnih VSCode-poziva
Vidi također
Zuletzt geändert: 29.01.2026. u 22:28