Inhaltsverzeichnis
Kontrolni seznam kakovosti kode
Preverjanja za konvencije poimenovanja, zasnovo funkcij, načelo DRY in SSOT.
Ta kontrolni seznam dopolnjuje Konvencije kode s konkretnimi kontrolnimi točkami.
Konvencije poimenovanja
Vzorec imenskega prostora (MS stil)
[ ] Imena enot sledijo WvdS.<Kategorija>.<Komponenta>.pas [ ] Zrcali strukturo Microsoft .NET s predpono WvdS. [ ] Primer: WvdS.UI.Controls.Button, WvdS.System.Logging
Hierarhija razredov (Borland stil)
[ ] Abstraktna baza uporablja predpono TWvdSCustom* [ ] Javna baza uporablja predpono TWvdSBase* [ ] Konkretni razredi uporabljajo predpono TWvdS* [ ] Vzorec: TWvdSCustomXxx -> TWvdSBaseXxx -> TUserXxx
Predpone tipov
| Kategorija | Predpona | Primer |
|---|---|---|
| Razredi | TWvdS* | TWvdSRouter, TWvdSButton |
| Vmesniki | IWvdS* | IWvdSActionResult, IWvdSBindable |
| Izjeme | EWvdS* | EWvdSRoutingException |
| Zapisi | TWvdS* | TWvdSBuildResult |
| Naštevanja | TWvdS* | TWvdSProjectType |
| Povratni klici | TWvdS* | TWvdSBuildCallback |
Splošno poimenovanje
[ ] Opisna imena (brez posameznih črk razen v zankah) [ ] Brez okrajšav razen znanih (URL, HTTP, JSON) [ ] Vmesniki imajo GUID za DI-vsebnik [ ] Zasebna polja: predpona F* (FValue, FCount) [ ] Parametri: predpona A* (AIndex, APath)
Zasnova funkcij
Smernice za velikost
[ ] 12-24 vrstic idealno [ ] Največ 40 vrstic (nad tem razdeliti) [ ] Največja globina gnezdenja: 3
Smernice za parametre
[ ] Največ 5-7 parametrov [ ] Pri več parametrih: uporaba zapisa/razreda [ ] Izbirni parametri na koncu
Enojna odgovornost
[ ] Vsaka funkcija ima ENO nalogo [ ] Ime funkcije v celoti opisuje nalogo [ ] Če je v imenu potreben "in" -> razdeliti
Poimenovanje z glagolom na začetku
[ ] Get* - Pridobi vrednost [ ] Set* - Nastavi vrednost [ ] Calculate* - Izvedi izračun [ ] Process* - Izvedi obdelavo [ ] Validate* - Izvedi validacijo [ ] Create* - Ustvari objekt [ ] Parse* - Razčleni vnos [ ] Format* - Oblikuj izhod
Načelo DRY
[ ] Brez podvojenega kode (več kot 3 identične vrstice -> ekstrahirati) [ ] Brez vzorcev kopiraj-prilepi [ ] Skupna logika v pomožnih funkcijah [ ] Konstante namesto ponavljajočih se literalov
Primer: Odprava kršitve DRY
(* PREPOVEDANO - Podvojena koda *) 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'); (* ... nadaljnja obdelava *) 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 obdelava *) end; (* PRAVILNO - Skupna 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); (* ... nadaljnja obdelava *) end;
Preverjanje SSOT
Single Source of Truth - Brez lokalnih kopij Common kode!
Uporaba skupnih knjižnic
[ ] NodeJS-API-ji prek ~/sources/common/web/nodejs/
- NodeJS.FS, NodeJS.Path, NodeJS.ChildProcess
[ ] VSCode-API-ji prek ~/sources/common/web/vscode/
- VSCode.Window, VSCode.Commands, VSCode.Workspace
[ ] WvdS Core prek ~/sources/common/core/
- WvdS.System.Logging, WvdS.VSCode.Security
Prepovedano
[ ] Brez neposrednih klicev require() v razširitvah [ ] Brez dvojnikov Common-enot v razširitvah [ ] Brez lokalnih implementacij ovojnic
Primer: Kršitev SSOT
(* PREPOVEDANO - Lokalni require() *) function FileExists(const APath: string): Boolean; begin asm var fs = require('fs'); (* Kršitev SSOT! *) Result = fs.existsSync(APath); end; end; (* PRAVILNO - Skupna knjižnica *) uses NodeJS.FS; function FileExists(const APath: string): Boolean; begin Result := ExistsSync(APath); (* Iz NodeJS.FS *) end;
Ločevanje odgovornosti
[ ] Logika UI samo v plasti UI (extension_main, *Dialog) [ ] Poslovna logika samo v storitveni plasti (*Service) [ ] Podatkovne strukture samo v modelni plasti (*Models) [ ] Storitve ne kličejo VSCode-API-jev neposredno [ ] Modeli ne vsebujejo logike
Arhitektura plasti
+-------------------------------------------------+ | Plast UI (extension_main.pas, *Dialog.pas) | | -> VSCode API-ji, interakcija z uporabnikom | +-------------------------------------------------+ | Storitvena plast (*Service.pas) | | -> Poslovna logika, validacija | +-------------------------------------------------+ | Modelna plast (*Models.pas) | | -> Zapisi, tipi, naštevanja | +-------------------------------------------------+ | Infrastruktura (NodeJS.*, VSCode.*, WvdS.*) | | -> Zunanji API-ji, abstrakcija platforme | +-------------------------------------------------+
Hitri kontrolni seznam za kopiranje
Kontrolni seznam pregleda (kakovost kode): Poimenovanje: - [ ] Imena enot: WvdS.<Kategorija>.<Komponenta>.pas - [ ] Razredi: predpona TWvdS* - [ ] Vmesniki: predpona IWvdS* - [ ] Opisna imena (brez okrajšav) Funkcije: - [ ] 12-24 vrstic idealno, največ 40 - [ ] Največ 5-7 parametrov - [ ] Enojna odgovornost - [ ] Poimenovanje z glagolom na začetku DRY: - [ ] Brez podvojenega kode - [ ] Skupna logika ekstrahirana - [ ] Konstante namesto literalov SSOT: - [ ] Skupne knjižnice uporabljene - [ ] Brez lokalnih klicev require() - [ ] Brez dvojnikov Common-enot SoC: - [ ] UI samo v plasti UI - [ ] Logika samo v storitveni plasti - [ ] Storitve brez neposrednih klicev VSCode
Glejte tudi
Zuletzt geändert: dne 29.01.2026 ob 22:23