Strategy Pattern در #C


استراتژی یک الگوی طراحی می باشد که یک سری قوانین در آن نوشته می شود و اجازه می دهد پیاده سازی هایی متفاوت از آن داشته باشیم. برای مثال میخواهیم یک ریپازیتوری برای خواندن دیتاها بنویسیم که بعدا در صورت نیاز بتوانیم محل خوانده شدن دیتاهارا (با کمترین تغییر در کد) تغییر دهیم. میتوانیم دیتاها را در ....
ادامه مطلب

مقدار null چگونه در ValueType ها ذخیره میشود؟


در سی شارپ دو نوع تایپ وجود دارد. ValueType و ReferenceType. این تایپ ها ویژگی های مختص به خود را دارند. یکی از آن ویژگی هایی که در این مطلب میخواهیم درباره آن صحبت کنیم قرار دادن مقدار Null در ValueTypeها می باشد. ReferenceTypeها دیتای اصلی را درون خود ذخیره نمی کنند، بلکه ....
ادامه مطلب

پیاده سازی یک FileHelper سازگار با تمامی سیستم عامل ها در Asp.Net Core


زمانی که در سی شارپ با فایل ها کار می کنیم، معمولا به این فکر هستیم که در تمامی سیستم عامل ها به درستی کار کند. زیرا مسیرها در ویندوز، لینوکس و مک باهم تفاوت دارند. برای مثال در ویندوز برای جداسازی پوشه ها از / استفاده می شود، اما در لینوکس از / استفاده می شود. اگر در ....
ادامه مطلب

استفاده از ThrowHelper به جای throw new Exception


زمانی که در برنامه می خواهیم خطایی را صادر کنید، معمولا از throw new exception استفاده می کنیم و متن مناسب خطا را درون کلاس exception قرار می دهیم. اما اگر تعداد این صادر کردن خطاها زیاد شود باعث افزایش کد assembly می شود. ....
ادامه مطلب

نکته پرفورمنسی در مورد List


اگر بخواهیم یک لیستی از داده ها را نگهداری کنیم، اولین راهی که به ذهنمان میرسد List یا Array است. در این مطلب میخواهیم یک نکته در مورد فضای اشغال شده توسط List را بررسی کنیم. کلاس List از یک آرایه داخلی برای نگهداری عناصر استفاده میکند. زمانی که یک List را نمونه سازی میکنید، ....
ادامه مطلب

کش شدن کوئری های Dapper


زمانی که از Dapper برای خواندن اطلاعات, افزودن اطلاعات و ... استفاده میکنید, در کتابخانه Dapper کوئری نوشته شده شما در یک ConcurrentDictionary نگهداری میشود که اگر مجددا همان کوئری اجرا شد, پروسس لازم برای اجرای کوئری مجدد اجرا نشود. ....
ادامه مطلب

حذف کردن async await


به طور معمول متدهایی که به صورت async نوشته میشوند, از متدهای sync سریعتر اجرا نمیشوند و فقط باعث میشوند که سیستم بتواند به ریکوئست های بیشتری پاسخ بدهد. در مطلب نحوه کار Thread pool این موضوع ارائه شد. همچنین در سایت sharplab.io میتوانید کدهایی که به صورت async نوشته میشوند را مشاهده کنید. ....
ادامه مطلب

در پروداکشن به خط خطا نباید اطمینان کرد


چند روز پیش توی یکی از پروژه ها که کار میکردم روش, یک خطای Object reference not set to an instance of an object صادر میشد و خطی که خطا صادر شده بود توی لاگها خط 61 بود. وقتی خط 61 رو چک کردم اصلا امکان خطا وجود نداشت, فقط یک کلاس نمونه سازی شده بود در خط 61. ....
ادامه مطلب

تفاوت throw و throw ex در #C


throw مجددا خطا را صادر میکند با همان StackTrace قبلی. دقیقا خطای صادر شده را مجددا صادر میکند. اما اگر از throw ex استفاده کنید بازم هم همان خطای قبلی را صادر میکند اما با یک تفاوت, StackTrace را ریست میکند!. برای مثال در کد زیر در متد DoSomethig یک عملیات تقسیم بر صفر انجام میدهیم که باعث بروز ....
ادامه مطلب

تفاوت async و sync


در مطلب قبلی نحوه کار Thread Pool ارائه شد. در این مطلب به بررسی تفاوت بین متدهای async و sync میپردازیم که فرق بین این دو نوع چیست و چرا باید از متدهای async استفاده کنیم. زمانی که شما یک متد را به صورت sync مینویسید و به طور مثال میخواهید عملیات ذخیره کردن دیتاهارا انجام دهید ....
ادامه مطلب