Ushbu maqolada CSharpCompiler va AssemblyRunner sinflarini SOLID tamoyillari asosida tahlil qilamiz. Maqsad — yozilgan kod arxitektura jihatidan qanchalik to‘g‘ri tashkil etilganini ko‘rish.
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.
Tamoyil:
Kod kengaytirishga ochiq, lekin o‘zgartirishga yopiq bo‘lishi kerak.
Tahlil:
ICsharpCompilervaIAssemblyRunnerinterfeyslari 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.
Tamoyil:
Interfeysni implement qilgan har qanday klass uning o‘rniga ishlay olishi kerak.
Tahlil:
IAssemblyRunnerniAssemblyRunneralmashtirmasdan ishlata olamiz.- Kelajakda
DockerAssemblyRunneryozilsa ham, u ham o‘rnini bosadi.
Xulosa: Interfeysni implement qilgan klasslar o‘zaro almashtirilishi mumkin.
✅ LSP bajarilgan.
Tamoyil:
Interfeyslar faqat kerakli metodlarni o‘z ichiga olishi kerak.
Tahlil:
ICsharpCompiler→ faqat kompilyatsiya va bajarishga oid metodlarni o‘z ichiga oladi.IAssemblyRunner→ faqatRunAssemblyAsyncmetodiga ega.
Xulosa: Ortiqcha yuk yo‘q, interfeyslar kichik va maqsadli.
✅ ISP bajarilgan.
Tamoyil:
Yuqori darajadagi modullar past darajadagi implementatsiyalarga emas, balki abstraksiyalarga tayanishi kerak.
Tahlil:
CSharpCompiler→ konkretAssemblyRunnerni emas, balkiIAssemblyRunnerinterfeysini ishlatadi.Program.csda servislar DI (Dependency Injection) orqali bog‘langan:builder.Services.AddSingleton<IAssemblyRunner, AssemblyRunner>(); builder.Services.AddSingleton<ICsharpCompiler, CSharpCompiler>();
Yuqori darajadagi modul (compiler) past darajadagi implementatsiyadan ajratilgan.
✅ DIP bajarilgan.
AssemblyRunnervaCSharpCompilersinflari 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.