sobota 3. prosince 2011

Pravidla pro pojmenování objektů v C# - část 2

  1. Úvod, jazyk, názvy tříd
  2. Názvy vlastností (properties), polí (fields) a proměnných (variables)
  3. Názvy metod a argumentů
  4. Další pravidla, názvy balíčků, testovací třídy

V předchozím díle jsme se podívali na několik základních pravidel pro názvosloví tříd. Neméně důležité je logicky a významově pojmenovat její vlastnosti, pole a proměnné uvnitř metod.

Názvy vlastností, polí a proměnných

Chtělo by se říci, že názvy veřejných vlastností jsou důležitější než názvy neveřejných vlastností, polí a proměnných. Není to však úplně pravda. Veřejné rozhraní třídy je samozřejmě důležité pro klienty třídy. Správný název urychlí pochopení a ušetří přepínání mezi kódem a dokumentací. Neveřejné názvy jsou však významné pro znovupoužitelnost, čistotu kódu, pochopení významu a efektivní navigaci v kódu.

Na co bychom si tedy měli dát pozor?

  1. Pro názvy vlastností (properties) se používá PascalCase, např. RodneCislo.

  2. Pro názvy polí (fields) se používá camelCase, např. rodneCislo.

  3. Pro názvy konstantních polí se používá PascalCase, např.

    private const int PocetMesicu = 12;

  4. Pro názvy proměnných (variables) se používá camelCase, např. polozky.

  5. Pokud vlastnost a pole (a proměnná) odpovídají stejnému logickému významu, měli by si jejich názvy odpovídat. Např.

    private string rodneCislo;
    
    public string RodneCislo
    {
        get
        {
            return rodneCislo;
        }
    
        private set
        {
            rodneCislo = value;
        }
    }
    

  6. Pokud je vlastnost autoimplementovatelná, tzn. getter je jednoduché vrácení hodnoty pole a setter je jednoduché nastavení hodnoty pole, je vhodné použít zkrácený a přehlednější zápis:

    public string RodneCislo { get; private set; }
    
    Výhodou tohoto zápisu je mimo jiné i jednodušší refaktorizace názvu. Nemusíte refaktorovat zvlášť název vlastnosti a pole.

  7. Pravidla uváděná dále jsou společná pro názvy vlastností, polí i proměnných.

  8. Vyhněte se opakování názvu třídy v názvech jejích vlastností. Např. třída Objednavka by neměla mít vlastnost PopisObjednavky nebo ObjednavkaId. Použijte "holý" název Popis a Id.

  9. V případě odkazu na Id jiné třídy ("primární klíč"), bude název odkazované třídy předcházet názvu vlastnosti Id:

    public class Osoba
    {
        public int Id { get; set; }
    }
    
    public class Uzivatel
    {
        public int OsobaId { get; set; }
    
        public String Jmeno { get; set; }
    }
    
    V tomto případě by bylo zřejmě vhodnější, aby třída Uzivatel nabízela přístup k objektu typu Osoba
    public Osoba Osoba
    

  10. Použijte název třídy v názvech vlastností jiných tříd, které na ni odkazují nebo vlastnost odpovídá vlastnosti odkazované třídy. Všimněte si vlastnosti Kod u třídy Mena a vlastnosti KodMeny u třídy Objednavka. Obě mají v systému stejný význam.

    public class Mena 
    {
        public string Kod { get; set; }
        public string Nazev { get; set; }
    }
    
    public class Objednavka 
    {
        public string KodMeny { get; set; }
        public decimal Castka { get; set; }
    }
    

  11. Pokud je to vhodné, použijte upřesňující významovou příponu. Např. CastkaVMeneDokladu, DobaTrvaniVMilisekundach, DenVTydnu.

  12. Pro booleovské vlastnosti použijte vhodnou předponu, např. JePlatna, MaNarokNaOdmenu.

  13. U zkratek ponechejte pouze první písmeno velké, např. Html, Id, Ico, KategorieDph.

  14. Nepoužívejte v názvech datové typy. Místo PolozkaObjednavkyList použijte PolozkyObjednavky, místo VystaveniDate použijte DatumVystaveni.

  15. Pokud používáte víceslovné názvy, měly by být přiměřeně dlouhé a srozumitelné. Snažte se vyjádřit stručně. Pokud je to však nezbytné, nestyďte se použít delší název.

  16. Stejně jako u názvů tříd je vhodné používat názvy z domény problému. Vycházet byste měli z doménového slovníku, který navrhne doménový analytik.

  17. Vyhněte se používání různých synonym pro logicky stejnou vlastnost různých tříd.

Používáte pravidlo, které zde není uvedeno? Máte připomínku k některému doporučení? Neváhejte vložit komentář.

Žádné komentáře:

Okomentovat