paint-brush
7 koncepte kryesore për të testuar aftësitë tuaja .NET nga@ssukhpinder
129 lexime

7 koncepte kryesore për të testuar aftësitë tuaja .NET

nga Sukhpinder Singh7m2024/09/30
Read on Terminal Reader

Shume gjate; Te lexosh

Ky artikull mbulon konceptet kritike të C# për zhvilluesit .NET, duke përfshirë IEnumerable kundrejt ICollection, Dependency Injection, async/wait, ref vs. out parametrat, trajtimin e përjashtimeve dhe ndryshimet midis Task dhe Thread në programimin e njëkohshëm. Ai ofron shembuj praktik të kodit për të testuar dhe thelluar të kuptuarit tuaj.
featured image - 7 koncepte kryesore për të testuar aftësitë tuaja .NET
Sukhpinder Singh HackerNoon profile picture
0-item
1-item
2-item
3-item

Ky artikull është i përsosur për këdo që dëshiron të provojë ekspertizën e tyre .NET!


Përshëndetje zhvilluesit e .NET,


Në këtë artikull, unë do të eksploroj koncepte të ndryshme C# që çdo zhvillues duhet të dijë. Është gjithmonë një ide e shkëlqyer për të testuar njohuritë tuaja dhe unë kam bashkuar disa shembuj në këtë artikull me shpjegime dhe shembuj kodesh.


Nëse i njihni dhe i kuptoni shembujt e kodit, ka të ngjarë të jeni mjaft mirë në .NET.

1. Dallimi midis IEnumerable<T> kundrejt ICollection<T>

Gjatë shkrimit të logjikës në C# , zhvilluesit shpesh hasin IEnumerable<T> dhe ICollection<T>. Ato mund të duken mjaft të ngjashme, por ato shërbejnë për qëllime të ndryshme në zhvillimin e softuerit.


  • IEnumerable<T> vepron si ndërfaqe bazë për koleksionet jo gjenerike. Ndihmon për të përsëritur mbi një koleksion të një lloji të përcaktuar.


Është mirë të kesh një koleksion të lehtë që është më i sigurt, pasi manipulimi i të dhënave nuk lejohet. Çdo koleksion nëse doni të parandaloni manipulimin e të dhënave, rekomandohet të përdorni IEnumerable<T>

 IEnumerable<int> numbers = new List<int> { 1, 2, 3 }; foreach (var number in numbers) { Console.WriteLine(number); // Outputs: 1 2 3 }
  • ICollection<T> shtrihet IEnumerable<T> lejon modifikime me ndihmën e metodave të ndryshimit. Kjo ndërfaqe përbëhet nga metoda për të shtuar, hequr dhe kontrolluar numërimet në koleksion.


 ICollection<int> data = new List<int> { 12,43,556}; numbers.Add(4); Console.WriteLine(data.Count); // Outputs: 4

Rekomandohet për ICollection<T> kur kërkohen metoda të ndryshme për mbledhjen dhe IEnumerable<T> për veprime të thjeshta leximi.

2. Roli i injektimit të varësisë në .NET Core

Rekomandohet të përdorni një model dizajni DI kur dëshironi të shkruani kod të lidhur lirshëm dhe të testueshëm, d.m.th. Me DI, zhvilluesit mund të menaxhojnë lehtësisht varësitë midis klasave.


.NET Core ka mbështetje të integruar për DI, duke e bërë të lehtë zbatimin.


Si një zhvillues mund të zbatojë DI në C#

  • Regjistroni shërbimet në metodën ConfigureServices të skedarit tuaj Startup.cs. Këtu përcaktoni se cilat shërbime do të jenë të disponueshme për injeksion.
 public void ConfigureServices(IServiceCollection services) { // Register a transient service services.AddTransient<IMyService, MyService>(); }


  • Injektoni shërbimet në klasat tuaja përmes injektimit të konstruktorit. Kjo siguron që klasat tuaja të marrin varësitë e tyre pa pasur nevojë t'i krijoni ato drejtpërdrejt.
 public class MyController : Controller { private readonly IMyService _myService; public MyController(IMyService myService) { _myService = myService; } public IActionResult Index() { var data = _myService.GetData(); return View(data); } }

Një kod është më i mirëmbajtur dhe i testueshëm kur një zhvillues shkëput krijimin e shërbimeve.

3. Diferenca ndërmjet parametrave ref dhe jashtë

Në C#, ref dhe out përdoren për të kaluar parametrat me referencë, por ato kanë karakteristika të dallueshme.

  • Parametrat ref kërkojnë që ndryshorja të inicializohet përpara se të kalohet në një metodë. Më pas, metoda mund të modifikojë vlerën e ndryshores.
 public void UpdateValue(ref int number) { number += 10; } int myNumber = 5; UpdateValue(ref myNumber); Console.WriteLine(myNumber); // Outputs: 15


  • parametrat out nuk kërkojnë inicializim përpara se të kalohen. Metoda duhet t'i caktojë një vlerë parametrit out përpara se të kthehet.
 public void GetValues(out int value1, out int value2) { value1 = 10; value2 = 20; } GetValues(out int a, out int b); Console.WriteLine(a); // Outputs: 10 Console.WriteLine(b); // Outputs: 20

ref zakonisht përdoret kur një metodë duhet të modifikojë një variabël ekzistues, ndërsa out përdoret kur një metodë duhet të kthejë vlera të shumta ose të inicializojë vlera që nuk janë dhënë nga thirrësi.

4. Async and Await: Përmirësimi i Performancës së Aplikacionit

Në .NET, programimi asinkron është thelbësor për të shkruar aplikacione efikase që performojnë mirë nën ngarkesë. Fjalët kyçe të asinkronizimit dhe pritjes thjeshtojnë punën me operacionet asinkrone.

  • metodat asinkronike ju lejojnë të kryeni detyra në mënyrë asinkrone. Shënoni një metodë me fjalën kyçe asinkronike për të mundësuar përdorimin e prit brenda saj.
 public async Task<string> FetchDataAsync() { await Task.Delay(1000); // Simulates an asynchronous operation return "Data fetched"; }


  • await ndihmon ndërfaqen e aplikacionit duke mos bllokuar lidhjen kryesore.
 public async Task ShowDataAsync() { string data = await FetchDataAsync(); Console.WriteLine(data); }

Nëse dëshironi të përmirësoni performancën e aplikacionit tuaj, përdorni asinkronizimin dhe prisni në mënyrë efektive dhe në të njëjtën kohë duke e mbajtur ndërfaqen e aplikacionit të përgjegjshëm.

5. Trajtimi i përjashtimeve në aplikacionet kryesore .NET

Trajtimi me hijeshi i përjashtimeve është thelbësor për ruajtjen e aplikacioneve të fuqishme dhe miqësore për përdoruesit. .NET Core ofron mekanizma të ndryshëm për trajtimin e përjashtimeve.

  • Trajtimi lokal i përjashtimeve: Përdorni blloqe try-catch për të kapur dhe trajtuar përjashtimet.
 try { int result = 10 / 0; // This will throw a DivideByZeroException } catch (DivideByZeroException ex) { Console.WriteLine("An error occurred: " + ex.Message); }


  • Trajtimi global i përjashtimeveASP.NET Core mund të menaxhohet duke përdorur programin e mesëm. Kapni të gjitha llojet e përjashtimeve në një vend të përbashkët që i ndihmon zhvilluesit të menaxhojnë mesazhet e gabimit të përshtatshëm/të zakonshëm për përdoruesit.
 public void Configure(IApplicationBuilder app) { app.UseExceptionHandler("/Home/Error"); }

Softueri i mesëm për trajtimin e përjashtimeve globale ofron një vend të përbashkët për të trajtuar të gjitha gabimet dhe përjashtimet e aplikacionit. Siguron që aplikacioni të trajtojë vazhdimisht përgjigjet.

6. Roli i cilësimeve të aplikacioneve.json ASP.NET Core

Skedari appsettings.json përdoret për menaxhimin e kredencialeve të aplikacionit, të tilla si vargjet e konfigurimit dhe çelësat e tjerë specifikë të aplikacionit. Cilësimet e konfigurimit mund të ndahen gjithashtu sipas mjediseve

  • Shembull i skedarit appsettings.json:
 { "ConnectionStrings": { "DefaultConnection": "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" }, "Logging": { "LogLevel": { "Default": "Warning" } } }


  • Qasja në vlerat e konfigurimit në aplikacionin tuaj është e thjeshtë duke përdorur sistemin e integruar të konfigurimit.
 public class MyService { private readonly string _connectionString; public MyService(IConfiguration configuration) { _connectionString = configuration.GetConnectionString("DefaultConnection"); } }

Skedari appsettings.json lejon marrjen e lehtë të cilësimeve të konfigurimit, të cilat duhet të trajtohen me efikasitet.

7. Kuptimi i detyrës kundrejt temës në C#

Të dy Task dhe Thread përdoren për programim të njëkohshëm në C#, por ato shërbejnë për qëllime të ndryshme.

  • Thread përfaqëson një rrugë të vetme ekzekutimi dhe është një konstrukt i nivelit më të ulët. Ai siguron më shumë kontroll mbi ekzekutimin, por kërkon menaxhim manual.
 Thread thread = new Thread(() => { Console.WriteLine("Running on a new thread"); }); thread.Start();


  • Task ofron një funksionalitet abstrakt për të zbatuar operacionet asinkronike dhe përdoret së bashku me asinkronizimin/pritjen.
 Task.Run(() => { Console.WriteLine("Running asynchronously"); });

Detyrat thjeshtojnë menaxhimin e operacioneve asinkrone dhe shpesh janë zgjedhja e preferuar për zhvillimin modern të C#.


Pra, si ia dolët?

Nëse e dini konceptin me besim dhe i kuptoni shembujt e kodit, ka të ngjarë të jeni të aftë për .NET.

Le të vazhdojmë bisedën dhe ta ndihmojmë njëri-tjetrin të rritemi si profesionistë të .NET.


Gëzuar kodimin!