C# Добри практики - k1zun4/dotnet-portfolio GitHub Wiki

💡 C# Добри практики

Добре дошли в раздела за добри практики при писане на C# код! 🎯
Тук ще откриете насоки за чист стил на писане, структуриране на код, избягване на грешки и прилагане на принципите на обектно-ориентирано програмиране.


🏷️ Конвенции за именуване

Променливи

  • Използвайте camelCasetotalSum, userAge

Методи

  • Използвайте PascalCaseCalculateSalary(), DisplayMenu()

Класове и интерфейси

  • Класове: PascalCaseEmployee, GameManager
  • Интерфейси: започвайте с IILogger, IRepository

Константи

  • Използвайте главни букви с подчертаване → MAX_SPEED, DEFAULT_TIMEOUT

🎨 Форматиране на код

  • Отстъп: 4 интервала или табулация
  • Скоби {}: поставяй на нов ред след условие/метод
  • Използвай празни редове между логически блокове
  • Поддържай еднакъв стил в целия проект
if (isLoggedIn)
{
    ShowDashboard();
}

🧱 SOLID принципи

S – Single Responsibility Principle
Всеки клас трябва да има само една отговорност.

O – Open/Closed Principle
Класовете трябва да са отворени за разширение, но затворени за промяна.

L – Liskov Substitution Principle
Подкласовете трябва да могат да заменят родителските класове без грешка.

I – Interface Segregation Principle
Използвай много малки интерфейси, вместо един обемен.

D – Dependency Inversion Principle
Зависимостите трябва да са към абстракции, не към конкретни реализации.


🧼 Примери за чист код

✅ Ясни и описателни имена
✅ Разделяне на логиката на малки методи
✅ Използване на константи вместо "магически числа"
✅ Коментари обясняват защо, не как

❌ Лошо:

if (x == 1) DoSomething();  

✅ Добро:

const int ACTIVE_STATUS = 1;
if (status == ACTIVE_STATUS)
{
    ActivateFeature();
}

⚠️ Чести грешки и как да ги избегнем

🚫 Липса на проверка за null
🚫 Използване на == за сравнение на string
🚫 Прекалено дълги методи без ясна структура
🚫 Непоследователни имена и отстъпи

Съвети:

  • Използвай string.Equals(a, b) вместо a == b
  • Проверявай входа на методи за null
  • Разделяй кода на логически части
  • Използвай try-catch внимателно и целенасочено

📚 Полезни ресурси