paint-brush
7 مفهوم کلیدی برای آزمایش مهارت های دات نت توسط@ssukhpinder
124 قرائت

7 مفهوم کلیدی برای آزمایش مهارت های دات نت

توسط Sukhpinder Singh7m2024/09/30
Read on Terminal Reader

خیلی طولانی؛ خواندن

این مقاله مفاهیم حیاتی C# را برای توسعه دهندگان دات نت پوشش می دهد، از جمله IEnumerable در مقابل ICollection، Dependency Injection، async/wait، refs. این نمونه کدهای عملی را برای آزمایش و تعمیق درک شما ارائه می دهد.
featured image - 7 مفهوم کلیدی برای آزمایش مهارت های دات نت
Sukhpinder Singh HackerNoon profile picture
0-item
1-item
2-item
3-item

این مقاله برای هر کسی که می خواهد تخصص خود را در دات نت ثابت کند عالی است!


سلام به توسعه دهندگان دات نت،


در این مقاله، مفاهیم مختلف C# را که هر توسعه‌دهنده‌ای باید بداند، بررسی می‌کنم. همیشه این ایده خوبی است که دانش خود را آزمایش کنید و من چند نمونه را در این مقاله با توضیحات و مثال های کد گردآوری کرده ام.


اگر نمونه‌های کد را می‌دانید و درک می‌کنید، احتمالاً در .NET عملکرد خوبی دارید.

1. تفاوت بین IEnumerable<T> در مقابل ICollection<T>

در حین نوشتن منطق در سی شارپ ، توسعه دهندگان اغلب با IEnumerable<T> و ICollection<T> مواجه می شوند. آنها ممکن است کاملا شبیه به نظر برسند اما اهداف متفاوتی در توسعه نرم افزار دارند.


  • IEnumerable<T> به عنوان رابط پایه برای مجموعه های غیر عمومی عمل می کند. به تکرار روی مجموعه ای از نوع تعریف شده کمک می کند.


خوب است که مجموعه ای سبک وزن داشته باشید که ایمن تر باشد، زیرا دستکاری داده ها مجاز نیست. هر مجموعه ای که می خواهید از دستکاری داده ها جلوگیری کنید، توصیه می شود از 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> IEnumerable را گسترش می دهد<T> تغییرات را با کمک روش های تغییر امکان می دهد. این رابط شامل روش هایی برای افزودن، حذف و بررسی تعداد در مجموعه است.


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

زمانی که متدهای تغییر برای مجموعه مورد نیاز است به ICollection<T> و برای اقدامات خواندن ساده IEnumerable<T> توصیه می شود.

2. نقش تزریق وابستگی در NET Core

توصیه می شود زمانی که می خواهید کدهای جفت شده و قابل آزمایش آزاد بنویسید، از یک الگوی طراحی DI استفاده کنید. با DI، توسعه دهندگان می توانند وابستگی های بین کلاس ها را به راحتی مدیریت کنند.


NET Core دارای پشتیبانی داخلی برای DI است که اجرای آن را آسان می کند.


چگونه یک توسعه دهنده می تواند DI را در سی شارپ پیاده سازی کند

  • خدمات را در روش ConfigureServices فایل Startup.cs خود ثبت کنید . این جایی است که شما تعریف می کنید که کدام خدمات برای تزریق در دسترس هستند.
 public void ConfigureServices(IServiceCollection services) { // Register a transient service services.AddTransient<IMyService, MyService>(); }


  • خدمات را از طریق تزریق سازنده به کلاس های خود تزریق کنید . این تضمین می کند که کلاس های شما وابستگی های خود را بدون نیاز به ایجاد مستقیم آنها دریافت می کنند.
 public class MyController : Controller { private readonly IMyService _myService; public MyController(IMyService myService) { _myService = myService; } public IActionResult Index() { var data = _myService.GetData(); return View(data); } }

زمانی که یک توسعه دهنده ایجاد سرویس ها را جدا می کند، یک کد قابل نگهداری و آزمایش تر است.

3. تفاوت بین پارامترهای ref و out

در سی شارپ، ref و out برای ارسال پارامترها با مرجع استفاده می‌شوند، اما ویژگی‌های متمایزی دارند.

  • پارامترهای ref نیاز دارند که متغیر قبل از اینکه به یک متد ارسال شود مقداردهی اولیه شود. سپس روش می تواند مقدار متغیر را تغییر دهد.
 public void UpdateValue(ref int number) { number += 10; } int myNumber = 5; UpdateValue(ref myNumber); Console.WriteLine(myNumber); // Outputs: 15


  • پارامترهای out قبل از ارسال نیازی به مقداردهی اولیه ندارند. متد باید قبل از بازگشت به پارامتر out مقداری را به آن اختصاص دهد.
 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 معمولاً زمانی استفاده می‌شود که یک متد نیاز به تغییر یک متغیر موجود داشته باشد، در حالی که out زمانی استفاده می‌شود که یک متد نیاز به برگرداندن چندین مقدار یا مقداردهی اولیه‌ای دارد که توسط تماس‌گیرنده ارائه نشده است.

4. Async and Await: بهبود عملکرد برنامه

در دات نت، برنامه نویسی ناهمزمان برای نوشتن برنامه های کارآمدی که عملکرد خوبی در زیر بار دارند ضروری است. کلمات کلیدی async و await کار با عملیات ناهمزمان را ساده می کند.

  • متدهای async به شما امکان می دهند وظایف را به صورت ناهمزمان انجام دهید. یک روش را با کلمه کلیدی async علامت گذاری کنید تا استفاده از await در داخل آن فعال شود.
 public async Task<string> FetchDataAsync() { await Task.Delay(1000); // Simulates an asynchronous operation return "Data fetched"; }


  • await با مسدود نکردن رشته اصلی به رابط کاربری اپلیکیشن کمک می کند.
 public async Task ShowDataAsync() { string data = await FetchDataAsync(); Console.WriteLine(data); }

اگر می خواهید عملکرد برنامه خود را بهبود ببخشید، از async استفاده کنید و به طور موثر و در عین حال پاسخگو نگه داشتن رابط کاربری برنامه منتظر بمانید.

5. رسیدگی به استثنا در برنامه های اصلی دات نت

رسیدگی به استثناها برای حفظ برنامه های کاربردی قوی و کاربر پسند بسیار مهم است. NET Core مکانیسم های مختلفی را برای مدیریت استثنا ارائه می دهد.

  • مدیریت استثناهای محلی: از بلوک‌های try-catch برای گرفتن و رسیدگی به استثناها استفاده کنید.
 try { int result = 10 / 0; // This will throw a DivideByZeroException } catch (DivideByZeroException ex) { Console.WriteLine("An error occurred: " + ex.Message); }


  • مدیریت استثناهای جهانی در ASP.NET Core را می توان با استفاده از میان افزار مدیریت کرد. همه انواع استثناها را در یک مکان مشترک بگیرید که به توسعه دهندگان کمک می کند تا پیام های خطای کاربرپسند/متداول را برای کاربران مدیریت کنند.
 public void Configure(IApplicationBuilder app) { app.UseExceptionHandler("/Home/Error"); }

میان‌افزار جهانی رسیدگی به استثناها مکانی مشترک برای رسیدگی به تمام خطاها و استثناهای برنامه فراهم می‌کند. این تضمین می کند که برنامه به طور مداوم پاسخ ها را مدیریت می کند.

6. نقش appsettings.json ASP.NET Core

فایل appsettings.json برای مدیریت اعتبار برنامه‌ها، مانند رشته‌های پیکربندی و سایر کلیدهای خاص برنامه استفاده می‌شود. تنظیمات پیکربندی را می توان بر اساس هر محیط نیز تقسیم کرد

  • نمونه فایل appsettings.json:
 { "ConnectionStrings": { "DefaultConnection": "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" }, "Logging": { "LogLevel": { "Default": "Warning" } } }


  • دسترسی به مقادیر پیکربندی در برنامه شما با استفاده از سیستم پیکربندی داخلی ساده است.
 public class MyService { private readonly string _connectionString; public MyService(IConfiguration configuration) { _connectionString = configuration.GetConnectionString("DefaultConnection"); } }

فایل appsettings.json اجازه می دهد تا تنظیمات پیکربندی را به راحتی واکشی کند، نیازهایی که باید به طور موثر مدیریت شوند.

7. درک Task در مقابل Thread در سی شارپ

هر دو Task و Thread برای برنامه نویسی همزمان در سی شارپ استفاده می شوند، اما اهداف متفاوتی دارند.

  • Thread یک مسیر اجرا را نشان می دهد و یک ساختار سطح پایین تر است. کنترل بیشتری بر روی اجرا فراهم می کند اما نیاز به مدیریت دستی دارد.
 Thread thread = new Thread(() => { Console.WriteLine("Running on a new thread"); }); thread.Start();


  • Task یک عملکرد انتزاعی برای اجرای عملیات async ارائه می دهد و همراه با async/wait استفاده می شود.
 Task.Run(() => { Console.WriteLine("Running asynchronously"); });

وظایف مدیریت عملیات ناهمزمان را ساده می کند و اغلب انتخاب ارجح برای توسعه C# مدرن است.


به مجموعه کامل مصاحبه C#.Net دسترسی پیدا کنید

خب، چطور شد؟

اگر مفهوم را با اطمینان می دانید و نمونه های کد را درک می کنید، احتمالاً به دات نت مسلط هستید.

بیایید گفتگو را ادامه دهیم و به عنوان متخصصان دات نت به رشد یکدیگر کمک کنیم.


کد نویسی مبارک!

L O A D I N G
. . . comments & more!

About Author

Sukhpinder Singh HackerNoon profile picture
Sukhpinder Singh@ssukhpinder
Programmer by heart | C# | Python | .Net Core | Xamarin | Angular | AWS

برچسب ها را آویزان کنید

این مقاله در ارائه شده است...