9.4 KiB
9.4 KiB
SWP.Core Naming Convention
Dette dokument definerer de officielle naming conventions for SWP.Core projektet baseret på analyse af eksisterende kodebase og .NET bedste praksis.
Generelle Principper
- Konsistens: Følg samme mønster gennem hele kodebasen
- Læsbarhed: Navne skal være selvforklarende og beskrivende
- Sprogovervejelser: Brug engelsk for al kode og kommentarer
- Undgå forkortelser: Brug fulde ord frem for forkortelser
1. Namespace Naming
Standard Format
SWP.Core.[FeatureArea].[SubArea]
Regler
- PascalCase for alle segmenter
- Brug
SWP.Coresom rod prefix (ikkePlanTempus.Core) - Hierarkisk struktur afspejler folder struktur
- Maksimalt 4 niveauer dybt for læsbarhed
Eksempler
// ✅ Korrekt
SWP.Core.CommandQueries
SWP.Core.Configurations.SmartConfigProvider
SWP.Core.Database.ConnectionFactory
SWP.Core.Entities.Users
SWP.Core.X.TDD.Security
// ❌ Forkert
PlanTempus.Core.CommandQueries // Forkert prefix
SWP.core.commandqueries // Forkert casing
SWP.Core.Cfg.SmartCfgProv // Forkortelser
2. Class Naming
Regler
- PascalCase for alle klasser
- Beskrivende navne der afspejler klassens ansvar
- Suffixes for specielle typer
Class Type Suffixes
| Type | Suffix | Eksempel |
|---|---|---|
| Abstract classes | (ingen) | Command |
| Interfaces | I prefix |
ISecureTokenizer |
| Exceptions | Exception |
ConfigurationException |
| Factories | Factory |
PostgresConnectionFactory |
| Services | Service |
UserService |
| Extensions | Extensions |
TelemetryExtensions |
| Modules (Autofac) | Module |
SecurityModule |
| Configuration | Configuration eller Options |
SeqConfiguration, SmartConfigOptions |
| Tests | Tests |
SecureTokenizerTests |
Eksempler
// ✅ Korrekt
public class SecureTokenizer : ISecureTokenizer
public class PostgresConnectionFactory : IDbConnectionFactory
public abstract class Command : ICommand
public class ConfigurationException : Exception
// ❌ Forkert
public class secureTokenizer // Forkert casing
public class Factory // For generisk
public class SecureTokenizerImpl // Undgå "Impl" suffix
3. Interface Naming
Regler
- PascalCase med
Iprefix - Beskriver capability eller kontrakt
- Undgå
Interfacesuffix
Eksempler
// ✅ Korrekt
public interface ISecureTokenizer
public interface IDbConnectionFactory
public interface IConfigurationRepository
// ❌ Forkert
public interface SecureTokenizer // Mangler I prefix
public interface ISecureTokenizerInterface // Redundant suffix
4. Method Naming
Regler
- PascalCase for alle metoder
- Begynd med verbum der beskriver handlingen
- Async metoder skal have
Asyncsuffix
Naming Patterns
| Pattern | Eksempel |
|---|---|
| Action methods | TokenizeText(), VerifyToken() |
| Factory methods | Create(), Build() |
| Async methods | LogAsync(), CreateAsync() |
| Boolean methods | IsValid(), CanExecute(), HasPermission() |
Eksempler
// ✅ Korrekt
public string TokenizeText(string word)
public async Task<bool> VerifyTokenAsync(string hash, string word)
public bool IsValidFormat(string input)
// ❌ Forkert
public string tokenize_text(string word) // Forkert casing
public async Task<bool> VerifyToken(string hash, string word) // Mangler Async suffix
public bool ValidFormat(string input) // Mangler verbum
5. Property Naming
Regler
- PascalCase for alle properties
- Brug substantiver eller substantiv-sætninger
- Auto-properties anbefales
Eksempler
// ✅ Korrekt
public Guid CorrelationId { get; set; }
public required string Email { get; set; }
public DateTime CreatedDate { get; set; }
public bool IsActive { get; set; }
// ❌ Forkert
public Guid correlationId { get; set; } // Forkert casing
public string GetEmail() { get; set; } // Metode navngivning
6. Field Naming
Private Fields
- camelCase med underscore prefix
_ - Beskrivende navne
Constants
- PascalCase for public constants
- camelCase med underscore prefix for private constants
Readonly Fields
- Som private fields med underscore prefix
Eksempler
// ✅ Korrekt
private readonly IHttpClient _httpClient;
private const int _saltSize = 16;
public const string DefaultConnectionString = "...";
private static readonly string _defaultEncoding = "UTF-8";
// ❌ Forkert
private readonly IHttpClient httpClient; // Mangler underscore
private const int SALT_SIZE = 16; // Forkert casing for private
public const string default_connection = "..."; // Forkert casing for public
7. Parameter Naming
Regler
- camelCase for alle parametre
- Beskrivende navne der afspejler parameterens formål
- Undgå single-letter navne (undtagen type parametre)
Eksempler
// ✅ Korrekt
public bool VerifyToken(string hashedToken, string plainTextPassword)
public void Configure(IServiceCollection services, string connectionString)
public async Task<T> ExecuteAsync<T>(CancellationToken cancellationToken)
// ❌ Forkert
public bool VerifyToken(string s1, string s2) // Ikke beskrivende
public void Configure(string ConnString) // Forkert casing
public async Task<T> ExecuteAsync<T>(CancellationToken ct) // Forkortelse
8. File og Folder Naming
Files
- PascalCase der matcher hovedklassen i filen
- En hovedklasse per fil (undtagen interne/helper klasser)
Folders
- PascalCase der afspejler namespace struktur
- Brug plural for samlinger af entities (f.eks.
Users,Configurations)
Eksempler
✅ Korrekt
/Core/CommandQueries/Command.cs
/Core/Entities/Users/User.cs
/Core/Configurations/SmartConfigProvider/SmartConfigProvider.cs
/Tests/Security/SecureTokenizerTests.cs
❌ Forkert
/Core/command-queries/command.cs
/Core/entities/users/user.cs
/Tests/security/secure_tokenizer_tests.cs
9. Test Naming
Test Classes
- Klassenavn +
Testssuffix - Samme namespace som den testede klasse +
.X.TDD
Test Methods
- Format:
[MethodName]_Should[ExpectedBehavior]_[Condition] - Eller:
[MethodName]_[Condition]_[ExpectedBehavior]
Test Projects
- Format:
[ProjectName].X.TDD
Eksempler
// ✅ Korrekt
namespace SWP.Core.X.TDD.Security;
[TestClass]
public class SecureTokenizerTests
{
[TestMethod]
public void TokenizeText_ShouldReturnDifferentTokens_ForSamePassword()
[TestMethod]
public void VerifyToken_WithValidPassword_ShouldReturnTrue()
[TestMethod]
public void VerifyToken_WithNullInput_ShouldThrowException()
}
// ❌ Forkert
public class TestSecureTokenizer // Forkert prefix
public void TokenizeTextTest() // Ikke beskrivende
public void Test1() // Ikke beskrivende
10. Configuration og Database Naming
Configuration Keys
- PascalCase for hver sektion
- Hierarkisk med kolon separator
- Logisk gruppering
Database vs C# Mapping
- Database: snake_case for kolonner
- C#: PascalCase for properties
- Brug mapping hvor nødvendigt
Eksempler
// ✅ Korrekt configuration
{
"Database": {
"ConnectionString": "...",
"CommandTimeout": 30
},
"Logging": {
"Level": "Information",
"Providers": {
"Seq": {
"Url": "http://localhost:5341"
}
}
}
}
-- ✅ Database (snake_case)
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(255),
password_hash VARCHAR(255),
created_at TIMESTAMP
);
// ✅ C# Entity (PascalCase)
public class User
{
public int Id { get; set; }
public string Email { get; set; }
public string PasswordHash { get; set; }
public DateTime CreatedAt { get; set; }
}
11. Specielle Konventioner
Generic Type Parameters
- Single letters:
T,TKey,TValue - Beskrivende hvis nødvendigt:
TEntity,TRequest,TResponse
Event Handlers
- Format:
On[EventName]ellerHandle[EventName]
Extension Methods
- Første parameter skal være
this - Metoder i statiske klasser med
Extensionssuffix
Async/Await
- Altid
Asyncsuffix for async metoder - Brug
CancellationToken cancellationTokensom sidste parameter
12. Undtagelser fra Konventioner
Acceptable Forkortelser
Id(frem for Identifier)Url(frem for UniformResourceLocator)Http(frem for HyperTextTransferProtocol)Json(frem for JavaScriptObjectNotation)Sql(frem for StructuredQueryLanguage)
Kendte Patterns
DTOsuffix for Data Transfer ObjectsCRUDi kommentarer og dokumentationAPIfor Application Programming Interface
Implementering
- Gradvis migration: Ret eksisterende kode gradvist ved ændringer
- Code reviews: Håndhæv conventions i code reviews
- Linting: Konfigurer analyzers til at håndhæve konventioner
- Dokumentation: Hold denne guide opdateret
Værktøjer
- EditorConfig: Konfigurer formatting regler
- StyleCop: Håndhæv naming conventions
- SonarQube: Code quality og consistency checks
- Visual Studio: Code analysis og suggestions