کدهک
1.95K subscribers
1.29K photos
7 videos
1 file
672 links
آموزشگاه تخصصی دات نت

https://codehaks.com

لینکدین :
https://www.linkedin.com/in/codehaks

یوتیوب:
https://www.youtube.com/@codehaksfa

ارتباط با مدیر :
Admin: @codehak
Email: ghods.hakim@hotmail.com
call: 09380146555
Download Telegram
Forwarded from DotNetZoom (ALI_1992)
❇️ نکاتی در مورد تست نویسی روی EF6 / EFCore توسط دیتابیس InMemory

🔸یکی از مزیت های الگوی Repository، قابلیت تست پذیری لایه دیتا به واسه ساختن ریپازیتوری های Fake هست. در واقع ریپازیتوری هایی میسازیم که از (مثلا IRepository) ارث بری میکنه ولی به جای ذخیره سازی در بانک اطلاعاتی، دیتا ها رو به صورت InMemory ذخیره و واکشی میکنه
همچنین روش های دیگری برای اینکار وجود داره مثل Mock کردن DbContext یا DbSet که هر کدوم دردسر ها و محدودیت های خودشو داره تا جایی که حتی بخشیدن عطاش به لقاش منطقی تره
اینجا لیستی از بهترین منابعش رو گلچین کردم (1 و 2 و 3 و 4 و 5 و 6 و 7 و 8 و 9) تا واسه خودمم آرشیو بمونه

🔻توی EFCore به دلیل وجود پروایدر InMemory نیازی به این کار نیست و عمل تست نویسی رو برامون خیلی راحت کرده ولی توی EF6 چون پروایدر InMemory نداریم مجبوریم تن به یکی از این بدیم.

🔹پروژه سورس باز و رایگان Effort یک پروایدر InMemory مخصوص Entity Framework هست (که از نسخه های 5 و 6 EF پشتیبانی میکنه) و امکان Unit Test نویسی برای EF رو براحتی براتون فراهم میکنه و سعی کرده
این کتابخونه از برای دیتابیس خودش از NMemory استفاده میکنه که یک Engine دیتابیس رابطه ای InMemory هست و سعی کرده تا حد زیادی رفتار های یک دیتابیس واقعی رو شبیه سازی کنه و از مواردی از جمله Indexes و Foreign Key Relations و Transaction Handling and Isolation و Stored Procedures و... پشتیبانی میکنه پس به نسبت بقیه روش ها (مثل یه List استاتیک!) در مورد شبیه سازی دیتابیس، رفتار بسیار بسیار قابل اعتماد تری ارائه میده

🔰کار باهاش هم خیلی راحته و از لینک و دردسر ها و محدودیت های پیاده سازی روش های قبلی رو نداره
https://entityframework-effort.net/overview
واسه مطالعه بیشتر هم لینک های زیر خوبن (اینجا و اینجا و اینجا)

نکته:
🔸تمام روش های بالا و اساسا تمام دیتابیس های InMemory (حتی پروایدر InMemory خود EFCore) یه مشکل اساسی دارن و اون هم اینه که هیچ کدوم نمیتونن 100 درصد رفتار یک دیتابیس واقعی رو شبیه سازی کنن. بدیهی هم هست چون که هیچ کدوم نمیتونن تمام قابلیت های دیتابیس واقعی پروژه شما (مثلا SqlServer) رو داشته باشن.

این کمبود ها که تعدادشونم کم نیست بعضی مواقع باعث مشکل میشن مثلا در مورد دیتابیس InMemory خود EFCore :
▪️شما نمیتونین SP های خودتون رو روش اجرا کنین
▪️شما نمیتونین از Transaction های دیتابیسی استفاده کنین
▪️شما نمیتونین از Function های دیتابیسی و یا کلا هر قابلیت منحصر به دیتابیس تون استفاده کنین
▪️قیودی که فقط توی دیتابیس واقعی اعمال میشن و ...
▪️حتی یک کوئری یکسان روی InMemory و دیتابیس واقعی میتونه نتایج متفاوتی داشته باشه (بدلیل تفسیر متفاوتی ازش توسط پروایدر مربوطه انجام میشه)
▪️در واقع تست درون حافظه‌ی LINQ to Objects با تست واقعی LINQ to Entities که روی یک بانک اطلاعاتی واقعی اجرا می‌شود، الزاما نتایج یکسانی نخواهد داشت
▪️حتی اگه یه متدی که معادل SQL ایی نداره توی کوئری هاتون استفاده کنین، هنگام استفاده از InMemory خطا نمیده ولی موقع دیتابیس واقعی خطای عدم امکان تفسیر به معادل Sql میده

🔹در نتیجه همه اینها پاس شدن یک تست با دیتابیس InMemory الزاما دلیل بر صحت عملکرد پروژه و به معنای درست کار کردن برنامه در دنیای واقعی نیست. و ممکنه همون تست با دیتابیس واقعی به خطا بخوره.

🔸در نهایت هرچند که دیتابیس InMemory رفتار قابل اطمینانی از یه دیتابیس رو نمیتونه شبیه سازی کنه ولی در مورادی که به این تناقض ها بخورد نمیکنیم (معمولا در حد CRUD و یه Storage) میتونه خیلی مفید و کاربردی باشه. فقط نکته اش اینه که حواسمون به این کمبود ها باشه و توصیه میشه که حتما در این گونه موارد که از Integration Test به همراه یک دیتابیس واقعی استفاده کنیم

🔻نظر شما در این باره چیه؟ توی پست های بعدی توضیحات بیشتری خواهم داد.
___________________
@DotNetZoom
Forwarded from کدهک
غلغلک دادن یک دایناسور تک شاخ :
بررسی Single-thread بودن Node.js و مقایسه ی آن با ASP NET Core

https://goo.gl/Y5RpRz
آیا قراردادن کلاسها در کتابخانه های جدا به معنی چند لایه کردن پروژه است؟ تصمیم گیری درباره محل قرار گرفتن اجزای پروژه یکی از ساده ترین در عین حال سخت ترین مراحل پیاده سازی هر پروژه ای است. در این ویدیو می بینیم که چطور فایلها را دسته بندی کنیم و یک مدل انعطاف پذیر برای ساختار پروژه در نظر بگیریم.

https://codehaks.com/go/agt
نسخه Alpha از Bootstrap 5.0 منتشر شد.

مهمترین تغییرات این نسخه حذف شدن وابستگی به jQuery است.

همچنین قرار است به زودی پشتیبانی از نوشتار راست به چپ به آن اضافه شود.

طبق گفته بلاگ بوت استرپ پشتیبانی از RTL باید سالها پیش به این کتابخانه اضافه میشد و حالا با کمک جامعه متن باز در حال انجام است.
آموزش آپلود کردن فایل در ASP NET Core

در این ویدیو تمامی مراحل آپلود کردن فایل در ASP NET Core آموزش داده میشود. فایل با IFormFile از مرورگر کاربر دریافت میشود و در فولدر سرور کپی میشود. در ادامه با محدود کردن دسترسی به فایل آشنا میشوید.

https://codehaks.com/go/eoz
آیا از Git-Flow استفاده می کنید؟
Anonymous Poll
15%
بله
23%
خیر
63%
آشنایی ندارم
Forwarded from DotNetZoom (ALI_1992)
کتابخانه اعتبارسنجی FoolProof برای ASP.NET Core

خیلی وقتا لازم میشه یه سری اعتبارسنجی روی مقادیر ورودی کاربر داشته باشیم. مثلا مقدارش کمتر یا بیشتر از فلان مقدار نباشه و ... تو این شرایط معمولا خودمون میایم و یه Attribute Validation سفارشی ایجاد میکنیم (که تازه اعتبار سنجی سمت کلاینت با jQuery رو هم نداره و فقط سمت سرور چک میشه) ولی الان میخوام یه کتابخونه رو معرفی کنیم که کارتون رو خیلی راحت میکنه.

🔸کتابخانه FoolProof.Core تعداد زیادی Attribute برای اعتبار سنجی مقادیر کاربر داره که همگی علاوه بر Server-side از Client-side Validation هم پشتیبانی میکنن. نسخه قدیمی آن (foolproof) برای ASPNET MVC سابق است.
(آموزش استفاده از آن در سایت dotnettips) ولی این نسخه از ASPNET Core پیشتیبانی میکنه

🔹لیست Attribute های پشتیبانی شده:
✔️ Is
✔️ EqualTo
✔️ NotEqualTo
✔️ GreaterThan
✔️ LessThan
✔️ GreaterThanOrEqualTo
✔️ LessThanOrEqualTo
✔️ Improved required validators:
✔️ RequiredIf
✔️ RequiredIfNot
✔️ RequiredIfTrue
✔️ RequiredIfFalse
✔️ RequiredIfEmpty
✔️ RequiredIfNotEmpty
✔️ RequiredIfRegExMatch
✔️ RequiredIfNotRegExMatch
✔️ In
✔️ NotIn

🔰لینک پکیچ Nuget و مخزن گیتهاب
https://www.nuget.org/packages/FoolProof.Core/
https://github.com/rpgkaiser/FoolProof.Core

#FoolProof #Validation #اعتبارسنجی
__________________
@DotNetZoom
منظور از Availability در یک سیستم در دسترس بودن آن است.

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

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

تعداد 9 ها یا The Nines اصطلاحی است که جهت نشان دادن درصد دسترسی به یک سیستم استفاده میشود.

برای بدست آوردن تعداد 9 های یک سیستم ابتدا باید با پیاده سازی سیستم مونیتورینگ مناسب میزان Down-Time را اندازه گرفت و با تقسیم آن در بازه زمانی درصد Availability را بدست آورد.

بسته به اینکه چه سرویسی ارائه می کنید میزان دسترسی مورد نیاز تغییر میکند.

سرویس شما به چه میزان Availability نیاز دارد؟
تعداد 9 های سرویس شما چندتاست؟
در بسیاری از پروژه ها لازم است اطلاعات فایل از کاربر دریافت و در سرور ذخیره شود. این ذخیره سازی ممکن است درون فولدر یا در دیتابیس انجام شود. در این مجموعه به آموزش کامل تمامی مراحل آپلود و دانلود فایل در ASP NET Core می پردازیم.

در این دوره آموزشی با تکنیک های آپلود به سرور و ذخیره سازی آن در دیتابیس آشنا می شوید. می آموزید استریم کردن فایل چطور انجام میشود و برای برش دادن عکس یا ایجاد گالری عکس از چه تکنیکهایی استفاده میشود.

مدت دوره 140 دقیقه

https://codehaks.com/go/fmn
آموزش ایجاد Global Tools در دات نت

یک Global Tool در اصل یک برنامه کنسول است که میتوانید آن را از هر جایی در سیستم اجرا کنید. این ابزار شباهت زیادی به پکیج های گلوبال در NPM دارند و می توانید برای پیاده سازی ابزارهای برنامه نویسی و کارهای عمومی از آنها استفاده کنید.

https://codehaks.com/go/glb
ساده بگیرید!

در اواخر جنگ جهانی دوم ارتش سرخ ماهانه 1300 تانک T-34 تولید می کرد. این تانک سبک بود و تعداد قطعات کمی داشت. اشکالاتی در طراحی داشت که باعث خرابی در مسافتهای طولانی میشد. با این وجود مهندسان روسی تصمیم گرفتند اشکالات را برطرف نکنند چون خط تولید را تغییر میداد و از سرعت تولید کم میشد. در عوض به همراه تانک قطعات یدک قرار میدادند. از آنجا که طراحی ساده ای داشت افراد با مهارت کم می توانستند در میدان جنگ تعمیرات را انجام دهند.

در سمت دیگر تانکهای Panther و Tiger آلمان از با کیفیت ترین ابزار نبرد بود. صدها کیلومتر بدون مشکل فنی حرکت می کرد و توپخانه سنگین آن می توانست انواع موانع را نابود کند. اما تولید این تانکها سخت بود. هر ماه کمتر از 200 تانک تولید میشد. در زمانی که آلمان با مشکل مواد خام مواجه شد تعمیر تانکهای قبلی هم ممکن نبود چون از نظر فنی پیچیده بود و نیاز به متخصص و زمان زیادی بود تا تانک دوباره به میدان برگردد. در نتیجه بسیاری از آنها با کوچکترین مشکل فنی در میدان جنگ رها میشد.

در مهندسی اصل KISS یا Keep it simple, Stupid می گوید بهتر است همه چیز را آنقدر ساده طراحی کنید تا احمق ها هم بتوانند از آن استفاده کنند.

بسیاری از برنامه نویسها سعی می کنند به کدهایشان پیچیدگی اضافه می کنند تا حرفه ای دیده شوند. تصور عمومی این است که اگر پروژه ای ساده پیاده شده باشد کار مبتدی است. این برنامه نویسها هر روز کدهایشان را بررسی می کنند تا فلان الگوی طراحی که در کتاب خوانده اند را به آن اضافه کنند. برای این افراد نشان دادن کد ساده به دیگران مایه ننگ است. اما این افراد نمی دانند که فردا باید باگهای همین کدهای پیچیده را خودشان برطرف کنند و در زمانی که سرور پایین آمده و هر ثانیه هم حیاتی است در انبار کاه باید به دنبال سوزن باشند. این افراد داکیومنت تحویل نمی دهند 6 ماه بعد خودشان هم نمی دانند در پروژه چه کردند و نیستند که پاسخگو باشند.

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

هرچقدر حرفه ای تر باشید از ساده ترین روشها برای حل پیچیده ترین مشکلات استفاده می کنید. پس قبل از نوشتن هر خط کد و اضافه کردن پیچیدگی بیشتر از خود بپرسید :
" آیا واقعا لازمش دارم؟"
Forwarded from DotNetZoom (ALI_1992)
معرفی Design Pattern ها به همراه مثال در زبان های مختلف

یکی از بهترین سایت هایی که میشه به عنوان مرجع برای #DesignPattern ها بهش نگاه کرد سایت زیر هست.

این سایت خیلی روون و ساده الگو های برنامه نویسی رو توضیح داده، براشون مثال زده و توی زبان های مختلفی از جمله #C و JavaScript و Java و Python و ... پیاده سازیشون کرده

https://refactoring.guru/design-patterns/catalog

🔰2تا ریپوی زیر هم پیاده سازی ایی از این دیزاین پترن ها در سی شارپ هست
1️⃣ https://github.com/exceptionnotfound/DesignPatterns
2️⃣ https://github.com/HamidMosalla/CSharpDesignPatterns
_____________________
@DotNetZoom
Forwarded from کدهک
آشنایی با Docker

داکر ابزاری برای توزیع و اجرای نرم افزار است که مشکل سازگاری با سیستم عامل های مختلف را حل میکند. این ابزار امروزه همه جا مورد استفاده قرار میگیرد و خوب است به عنوان توسعه دهنده ی نرم افزار درباره آن بیشتر بدانید. در این ویدیو به معرفی داکر می پردازیم و در ادامه از Docker در یک پروژه ASP NET Core استفاده می کنیم.

https://cutt.ly/ortrfXx
Forwarded from کدهک
آشنایی با Docker - قسمت دوم

در این ویدیو با استفاده از Docker دیتابیس Redis رو نصب و اجرا می کنیم
سپس از پروژه ASP NET Core یک Image داکر تهیه می کنیم.

https://tinyurl.com/cdhk-docker2
با استفاده از قابلیت Expression Bodied Members می توانید کدهای کمتر و مرتب تری در سی شارپ داشته باشید.


https://codehaks.com/go/bfq
Forwarded from اِسکیلی Skilly (مهدی کرامتی)
🔈🤑 تخفیف 40% کلیه پکیج های آموزش ویدئویی برنامه نویس - ویژه تیرماه 99

کد تخفیف: Tir99
تاریخ انقضای کد تخفیف فوق: جمعه، 13 تیر 99، ساعت 12 شب

لازم به ذکر است قیمت پکیج های آموزشی نیز جهت رفاه حال شما عزیزان کاهش یافته است، بدین صورت که پس از اعمال کد تخفیف فوق، قیمت هر یک از پکیج های ASP.NET MVC و ASP.NET Core و Angular 8 مبلغ 90.000 تومان، قیمت پکیج سی شارپ سطح 1 مبلغ 60.000 تومان، و پکیج های آموزش مفاهیم وب مبلغ 30.000 تومان خواهد بود.

همچنین، آموزش های ارائه شده در پکیج های آموزش ASP.NET Core، بدون هیچ تغییری در ASP.NET Core 3.1 نیز قابل استفاده است.

با تقدیم احترام
#مهدی_کرامتی
#تخفیف
@barnamenevis_net
@barnamenevis_org
Forwarded from کدهک
در برنامه نویسی موازی هماهنگ کردن Thread ها همیشه یک چالش است. در این ویدیو با Race Condition آشنا میشویم و میبینیم که چطور میتوان مشکل Data Race را با کمک Interlocked در سی شارپ حل کرد.

https://tinyurl.com/yy6wqntw
انتشار Single-File در دات نت

در NET Core از نسخه 3 به بعد می توانید پروژه های خود را به صورت یکپارچه درون یک فایل پابلیش کنید. انتشار اپلیکیشن و نصب آن روی سرور یا در سیستم مشتری با این روش ساده تر است. در این ویدیو نحوه ایجاد آن را بررسی می کنیم و با کمک ابزار Trim حجم آن را کم می کنیم.

https://www.aparat.com/v/85VHJ
در سی شارپ 8.0 سینتکس جدیدی برای استفاده از Using اضافه شده است که می تواند کار با آن را ساده تر کند.

https://codehaks.com/go/pqt