Skip to content

Latest commit

 

History

History
152 lines (117 loc) · 8.84 KB

04-Namnkonventioner.md

File metadata and controls

152 lines (117 loc) · 8.84 KB

IBM 1401 computer room

4. Namnkonventioner

Om inget annat sägs eller andra teamöverenskommelser finns, följ Microsofts namngivning, dokumentation och guider. Harmonisera med .NET ramverket. För att backa upp det, och vara ännu mera precis, använd StyleCop som vägledning.

  1. Använd engelska
    Alla medlemmar, parametrar och variabler bör namnges med ord från engelska språket.

  2. Domänspråk är undantag till engelska
    Använd ord, fraser och termer från företagets domän eller vad som är allmänt vedertaget i branschen. Finns det en entitet som heter Konto som kommer från ett backofficesystem, behåll det. Döp det inte till Account. Det underlättar när ytterligare en kontohanterare implementeras där namngivningen av objekt faktiskt är Account. Om det finns en framtagen domänspråksdokumentation i företaget, följ den framför allt annat.

    Gemensamt domänspråk är viktigt i kedjor som: beslutsfattare/intressent ↔ affärsanalytiker ↔ produktägare ↔ arkitekt ↔ projektledare ↔ scrummaster ↔ interaktionsdesigner ↔ copywriter ↔ redaktör ↔ kundtjänst ↔ ekonomichef ↔ kientutvecklare ↔ backendutvecklare ↔ api-utvecklare.

    Det är oundvikligt att begrepp tas bort eller ändrar betydelse i delar av systemkedjan. Då är kommentarer i kod att rekommendera. Beskriv vad det hette tidigare och möjligen lite bakgrund, då blir det enkelt att söka/hitta och förstå koden.

  3. Grammatiskt rätt
    Välj namn som är lätta att läsa och grammatiskt korrekt. Föredra exempelvis HorizontalAlignment framför AlignmentHorizontal.

  4. Använd inte ord från programmeringsspråk
    Undvik att använda nyckelord från språk i lösningen. Använd exempelvis inte Interface som en variabel.

  5. Använd inte prefix för fält
    Några exempel:

    • Använd inte _ som prefix för privata fält.
    • Använd inte g_ eller s_ för att skilja på statiska och icke statiska fält.
    • Använd inte typnamn (eller förkortning av det) som prefix, exempelvis strAge.
  6. Undvik förkortningar
    Exempel: använd OnButtonClick framför OnBtnClick. Undvik också variabler med enskilda tecken som i och q. Använd index respektive query istället. Undantaget till regeln kan vara välkända förkortningar som är allmänt accepterade eller välkända i domänen. UI framför UserInterface är ett exempel.

  7. Ange inte typer i namn
    Namnge medlemmar, parametrar eller variabler efter dess betydelse och inte efter vilken typ det är. Exempel: GetLength är ett bättre namn än GetInt. Använd inte Enum, Class eller Struct i namn.

  8. Upprepa inte klassnamn i medlemmar

    ❌ UNDVIK:

    class Employee
    {
        Employee GetEmployee() {}
        DeleteEmployee() {}
    }

    ✅ GÖR SÅ HÄR:

    class Employee
    {
        Employee Get() {}
        Delete() {}
    }
  9. Klasser som singular
    Namnge klasser som singular för att undvika förrvirring när man skapar kollektioner. Om du inte kan ta bort s från ett klassnamn kan du lägga till ord som Model, Type eller andra generella namn. Exempel: CategoriesModel. Om namnet kommer från ett domänspråk/en integration får det bli en bedömning från fall till fall.

    ❌ UNDVIK:

    var categories = new List<Categories>();

    ✅ GÖR SÅ HÄR:

    var categories = new List<Category>();
  10. Verb i klassnamn
    Använd inte verb i klassnamn.

    ❌ UNDVIK:

    public class CreateNewPerson
    {
    }

    ✅ GÖR SÅ HÄR:

    public class Person
    {
    }
  11. Enum

    • Namnge enum som singular om det inte är frågan om bit-fält (Flag).
    • Lägg inte till Enum eller Flag i namnet.
    • Upprepa inte emnumnamnet i element.
  12. Namnge som i .NET Framework
    Namnge medlemmar på liknande sätt som medlemmar i .NET Framework-klasser. Om du exempelvis definierar en klass som ska bete sig som en samling, lägg till medlemmar som Add, Remove och Count framför AddItem, Delete eller NumberOfItems.

  13. Egenskapsnamn

    • Namnge egenskaper med substantiv, substantivfraser eller ibland adjektiva fraser.
    • Benämn booleska egenskaper med jakande fraser, exempelvis CanSearch istället för CantSearch.
    • Använd prefix som Is, Has, Can och Allows för booleska egenskaper. Exempel: IsVisible, HasChildren och CanExecute.
  14. Metodnamn
    Namnge metoder med verb eller verb-objekt par. Exempel Show respektive ShowDialog. Ett bra namn bör ge en antydan om vad en medlem gör, och om möjligt, varför.

    Inkludera inte And i namnet på en metod. Det innebär att metoden gör mer än en sak och det bryter mot "single responsibility principle”.

    En generell konvention för metoder som returnerar Task eller Task<Result> är att namnge dem med suffixet Async alternativt TaskAsync.

  15. Namnge namnrymder
    Använd produktnamn, teknikbenämningar, lager, verb och funktioner i namnrymder. Överväg att använda företagsnamn då uppköp och fusioner händer.

    Undvik namn på typer i namnrymder, exempelvis en klass med namnet Order. Men ett substantiv i pluralform är vanligt, såsom Collections och Helpers.

  16. Händelsenamn
    Namnge händelser med verb eller verbfraser. Till exempel: Click, Deleted, Closing, Minimizing och Arriving. Använd -ing och -ed för att uttrycka före och efter en händelse.

    Anta att du vill definiera händelser relaterade till radering av ett objekt. Undvik att definiera Deleting och Deleted som StartDelete och EndDelete. Namnge istället dessa som:

    • Deleting: Händer straxt före objektet blir raderat.
    • Delete: Händer när objektet behöver raderas av händelsehanteraren.
    • Deleted: Händer när objektet redan är raderat.

    Det är god praxis att ha On som prefix i metoder som handskas med händelser. Till exempel kan en metod som hanterar Closing namnges som OnClosing.

  17. Pascal- eller Camel format
    Namnge typer enligt nedan.

    Språkelement Format Exempel StyleCop-regler
    Class, Struct Pascal AppDomain
    Interface Pascal IBusinessService SA1302: InterfaceNamesMustBeginWithI
    Enumeration type Pascal ErrorLevel
    Enumeration values Pascal FatalError
    Event Pascal Click
    Private field Camel listItem SA1306: FieldNamesMustBeginWithLowerCaseLetter
    SA1310: FieldNamesMustNotContainUnderscore
    SA1309: FieldNamesMustNotBeginWithUnderscore
    SA1305: FieldNamesMustNotUseHungarianNotation
    Protected field Pascal MainPanel SA1307: AccessibleFieldsMustBeginWithUpperCaseLetter
    Constant field Pascal MaximumItems SA1303: ConstFieldNamesMustBeginWithUpperCaseLetter
    Constant Local variable Camel maximumItems
    Read-only static field Pascal RedValue SA1304: NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter
    Local Variable Camel listOfValues SA1308: VariableNamesMustNotBePrefixed
    Method Pascal ToString
    Namespace Pascal System.Drawing
    Parameter Camel typeName
    Type Parameter Pascal TView
    Property Pascal BackColor

    I ReSharper kan det vara definerat på detta sätt som standrad:
    ReSharper Naming Style

Referenser:


Drivande principer | Layoutkonventioner