Lekce 22: Principy SOLID v C# – Jak psát čistý a udržitelný kód

Principy SOLID patří mezi základní stavební kameny objektově orientovaného programování. Jejich správné dodržování v jazyce C# vede k tvorbě čitelného, flexibilního a dobře udržovatelného kódu. V této lekci si vysvětlíme jednotlivé principy SOLID, ukážeme jejich praktické použití v C#, a také si řekneme, jak jejich aplikace ovlivňuje kvalitu softwaru i jeho nepřímý dopad na výkon aplikací.
1. Co je SOLID?
SOLID je akronym pro pět základních principů návrhu objektově orientovaného softwaru:
- S – Single Responsibility Principle (Princip jediné odpovědnosti)
- O – Open/Closed Principle (Princip otevřenosti/uzavřenosti)
- L – Liskov Substitution Principle (Princip substituce podle Liskovové)
- I – Interface Segregation Principle (Princip oddělení rozhraní)
- D – Dependency Inversion Principle (Princip inverze závislostí)
2. Single Responsibility Principle (SRP)
Každá třída by měla mít jedinou odpovědnost a tedy jen jeden důvod ke změně.
Špatný příklad:
public class UzivatelService
{
public void VytvorUzivatele() { }
public void VytiskniUzivatele() { }
}
Správný příklad:
public class UzivatelService
{
public void VytvorUzivatele() { }
}
public class TiskService
{
public void VytiskniUzivatele() { }
}
- Jedna třída řeší správu dat, druhá tisk.
3. Open/Closed Principle (OCP)
Třídy by měly být otevřené pro rozšíření, ale uzavřené pro modifikaci.
Špatný příklad:
public class PlatbaService
{
public void Zaplat(string typ)
{
if (typ == "Karta") { }
else if (typ == "Hotovost") { }
}
}
Správný příklad:
public interface IPlatba
{
void Zaplat();
}
public class PlatbaKartou : IPlatba
{
public void Zaplat() { }
}
public class PlatbaHotovosti : IPlatba
{
public void Zaplat() { }
}
- Přidání nového typu platby nevyžaduje změnu existujícího kódu.
4. Liskov Substitution Principle (LSP)
Podtřídy by měly být plnohodnotnou náhradou svých rodičovských tříd.
Správný příklad:
public class Pták
{
public virtual void Leť() { }
}
public class Holub : Pták
{
public override void Leť() { }
}
Pokud bychom přidali nelétajícího ptáka (např. tučňáka) bez úpravy hierarchie, porušili bychom LSP.
5. Interface Segregation Principle (ISP)
Rozhraní by měla být specifická a úzká, nikoli velká a obecná.
Špatný příklad:
public interface IVozidlo
{
void Jed();
void Letej();
}
Správný příklad:
public interface IPozemniVozidlo
{
void Jed();
}
public interface ILetadlo
{
void Letej();
}
- Každá třída implementuje jen metody, které potřebuje.
6. Dependency Inversion Principle (DIP)
Závislosti by měly být směrovány na abstrakce, ne na konkrétní implementace.
Správný příklad:
public interface ILogger
{
void Loguj(string zprava);
}
public class Logger : ILogger
{
public void Loguj(string zprava)
{
Console.WriteLine(zprava);
}
}
public class ObjednavkaService
{
private readonly ILogger logger;
public ObjednavkaService(ILogger logger)
{
this.logger = logger;
}
}
- ObjednavkaService závisí na rozhraní, nikoli na konkrétní implementaci.
7. Výhody dodržování SOLID v C#
✅ Vyšší čitelnost a udržovatelnost kódu
✅ Snadnější testování a rozšiřitelnost
✅ Lepší výkon a spolehlivost aplikací
✅ Vyšší stabilita aplikace => lepší SEO hodnocení pro webové aplikace
8. SEO souvislosti principů SOLID
Ačkoliv SOLID principy přímo neovlivňují aplikaci, mají nepřímý dopad:
- Stabilní a rychlá aplikace zvyšuje uživatelskou spokojenost a snižuje míru opuštění stránek.
- Snadnější aktualizace a rozšíření znamenají rychlejší reakce na nové požadavky (např. Core Web Vitals).
- Bezchybné fungování aplikace posiluje důvěryhodnost webu a tím i jeho SEO pozici.
Závěr
Principy SOLID tvoří základ kvalitního objektově orientovaného návrhu v C#. Jejich dodržování vede k čistému, čitelnému a snadno rozšiřitelnému kódu, který je méně náchylný k chybám a snáze se testuje. Implementace těchto zásad přináší výhody nejen pro vývojáře, ale také pozitivně ovlivňuje výkon a stabilitu aplikace, což má nepřímý dopad i na SEO.