Skip to content

Instantly share code, notes, and snippets.

@sirojiddin0198
Created August 23, 2025 07:04
Show Gist options
  • Select an option

  • Save sirojiddin0198/988d1d39bc8563dd7ac76bad12bcc048 to your computer and use it in GitHub Desktop.

Select an option

Save sirojiddin0198/988d1d39bc8563dd7ac76bad12bcc048 to your computer and use it in GitHub Desktop.
SOLID

SOLID Tamoyillari bo‘yicha CSharpCompiler va AssemblyRunner Tahlili

Ushbu maqolada CSharpCompiler va AssemblyRunner sinflarini SOLID tamoyillari asosida tahlil qilamiz. Maqsad — yozilgan kod arxitektura jihatidan qanchalik to‘g‘ri tashkil etilganini ko‘rish.


1️⃣ Single Responsibility Principle (SRP)

Tamoyil:

Har bir klass faqat bitta mas’uliyatga ega bo‘lishi kerak.

Tahlil:

  • AssemblyRunner → faqat compiled assembly’ni ishga tushirish (run qilish) bilan shug‘ullanadi.
  • CSharpCompiler → faqat C# kodni compile qilish va natijasini qaytarish bilan shug‘ullanadi.

Xulosa: Har bir klass o‘ziga xos vazifaga ega va ular aralashmagan.
SRP bajarilgan.


2️⃣ Open/Closed Principle (OCP)

Tamoyil:

Kod kengaytirishga ochiq, lekin o‘zgartirishga yopiq bo‘lishi kerak.

Tahlil:

  • ICsharpCompiler va IAssemblyRunner interfeyslari orqali ishlash mumkin.
  • Agar boshqa compiler (masalan, VB.NET) yoki boshqa runner (masalan, Docker asosidagi runner) kerak bo‘lsa, yangi implementatsiya yozish kifoya.

Xulosa: Mavjud kodni o‘zgartirmasdan kengaytirish mumkin.
OCP bajarilgan.


3️⃣ Liskov Substitution Principle (LSP)

Tamoyil:

Interfeysni implement qilgan har qanday klass uning o‘rniga ishlay olishi kerak.

Tahlil:

  • IAssemblyRunner ni AssemblyRunner almashtirmasdan ishlata olamiz.
  • Kelajakda DockerAssemblyRunner yozilsa ham, u ham o‘rnini bosadi.

Xulosa: Interfeysni implement qilgan klasslar o‘zaro almashtirilishi mumkin.
LSP bajarilgan.


4️⃣ Interface Segregation Principle (ISP)

Tamoyil:

Interfeyslar faqat kerakli metodlarni o‘z ichiga olishi kerak.

Tahlil:

  • ICsharpCompiler → faqat kompilyatsiya va bajarishga oid metodlarni o‘z ichiga oladi.
  • IAssemblyRunner → faqat RunAssemblyAsync metodiga ega.

Xulosa: Ortiqcha yuk yo‘q, interfeyslar kichik va maqsadli.
ISP bajarilgan.


5️⃣ Dependency Inversion Principle (DIP)

Tamoyil:

Yuqori darajadagi modullar past darajadagi implementatsiyalarga emas, balki abstraksiyalarga tayanishi kerak.

Tahlil:

  • CSharpCompiler → konkret AssemblyRunner ni emas, balki IAssemblyRunner interfeysini ishlatadi.
  • Program.cs da servislar DI (Dependency Injection) orqali bog‘langan:
    builder.Services.AddSingleton<IAssemblyRunner, AssemblyRunner>();
    builder.Services.AddSingleton<ICsharpCompiler, CSharpCompiler>();

Xulosa

Yuqori darajadagi modul (compiler) past darajadagi implementatsiyadan ajratilgan.
DIP bajarilgan.


🔎 Umumiy Xulosa

  • AssemblyRunner va CSharpCompiler sinflari SOLID tamoyillariga to‘liq mos keladi.
  • Kod modulli, kengaytiriladigan va testlash uchun qulay tarzda yozilgan.
  • Kelajakda qo‘shimcha runner yoki compiler qo‘shish uchun faqat yangi implementatsiya yozish kifoya.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment