DotNetZoom – Telegram
DotNetZoom
2.98K subscribers
342 photos
18 videos
36 files
606 links
DotNetZoom
💎 Everything about .NET

ارتباط با مدیر و تبلیغات آگهی استخدام:
@mjebrahimi

لینک گروه ASPNET Core:
https://news.1rj.ru/str/+ufG25x7lVFgyYTNk
Download Telegram
#سری_معرفی_وسایت_های_برتر

معرفی 10 سایت برتر (سری پنجم)
در مورد
#C و NET Core. و ASP.NET Core

🔸توی این سری پست ها هربار 10 وبسایت برتر که از نظر سطح علمی و کیفیت محتوا، بروز و متنوع بودن بهترین هستند رو معرفی میکنم
اینا منابعی هستند که معمولا خودم دنبالشون میکنم

1️⃣ https://enterprisecraftsmanship.com/
2️⃣ https://blog.ploeh.dk/
3️⃣ https://www.kamilgrzybek.com/
4️⃣ https://daveabrock.com/
5️⃣ https://thomaslevesque.com/
6️⃣ https://blog.miguelbernard.com/
7️⃣ https://josef.codes/
8️⃣ https://procodeguide.com/
9️⃣ https://www.thereformedprogrammer.net/
🔟 https://dotnetthoughts.net/
_________________
@DotNetZoom
معرفی کتابخانه MongoDbGenericRepository

قبلا کتابخونه MongoFramework رو معرفی کردیم که یه رابط کاربری شبیه Entity Framework رو برای کار با MongoDb در اختیارمون میذاشت
اون کتابخونه ضمن مزایا و راحتیش، یه سری معایب هم داره چرا که با دید EF طراحی شده و برای استفاده های پیشرفته تر و کاملتر از MongoDb دستمون رو بسته نگه میداره

کتابخانه MongoDbGenericRepository یک wrapper روی درایور سی شارپ MongoDb هست و سعی کرده یه پیاده سازی از Repository ارائه بده.
این کتابخونه نسبت به قبلی، توی سفارشی سازی و استفاده بیشتر و پیشرفته تر از امکانات mongo دستمون رو باز تر میگذاره که طبیعتا نیازمند این هست که دانش بیشتر هم از مونگو داشته باشین

🔰نکته:
🔸این کتابخونه برای کار های متوسط انتخاب خوبیه (مثلا برای کسانی که تا حدودی mongo بلدن و میخوان راحت تر ازش استفاده کنن)
🔹ولی برای کار ها پیشرفته و پروژه های بزرگ خیلی پیشنهاد نمیکنم. در اون سطح بهترین روش استفاده از خود درایور سی شارپ mongodb هست.

🔰ریپازیتوری گیتهاب پروژ به همراه آموزش:
https://github.com/alexandre-spieser/mongodb-generic-repository
______________
@DotNetZoom
❇️ نواقص درایور سی شارپ MongoDb

درایور سی شارپ MongoDb یه سری نواقص داره و هنوز به بلوغ کافی نرسیده، مخصوصا توی parser دستورات Linq اش به کوئری های mongo خیلی جای کار داره
پس اگه از MongoDb تو پروژه های خودتون استفاده میکنین یا میخواین بکنین حواستون باشه

تو این ریپازیتوری چند تا باگ خیلی ساده و بدیهی ازش رو مثال زدم
https://github.com/mjebrahimi/MongoDb.Bugs
🔰به عنوان مثال:
1️⃣ شما نمیتونین روی کالشن ها از شرط Contains() == false استفاده کنین
2️⃣ شما نمیتونین از شرط ("text")Contains روی یه فیلد متنی درون یه Embedded Document استفاده کنین
3️⃣ شما نمیتونین از دستور ()ToList روی Embedded Documents ها استفاده کنین
4️⃣ شما نمیتونین از متد ProjectTo کتابخانه AutoMapper برای مپ کردن Embedded Document ها استفاده کنین

🔰نکته:
🔸اینها هیچکدوم محدودیت های خود MongoDb نیستند بلکه نواقص کتابخانه درایور سی شارپ اون هست. درواقع Parser ایی که قراره Expression Tree حاصل از دستورات Linq رو به کوئری های mongo ترجمه کنه ضعف داره
🔹این باگ ها رو قبلا گزارش کردم و همگی تائید شدند و قرار هست در آینده برطرفش کنن ولی فعلا زمانش مشخص نیس. طبق صحبت هایی که داشتیم ظاهرا میخوان درایورش رو بازنویسی کنن و توی اون نسخه تمامی این مشکلات برطرف خواهد شد
🔸جهت رفع بعضی از این مشکل ها مادامی که این باگ ها برطرف بشه میتونین از کوئری نویسی دستی به جای linq استفاده کنین
🔹خود mongodb به لحاظ کوئری نویسی بسیار قدرتمند هست و خیلی کار ها رو میشه باهاش کرد که با linq اصلا امکان پذیر نیست (در واقع اصلا متد معادلش توی linq وجود نداره) پس پیشنهاد میکنم برای کوئری های پیچیده حتما به صورت دستی کوئری بنویسین؛ اینطوری میتونین کوئری های های بهینه تر و قدرتمند تری رو ایجاد کنین
____________________
@DotNetZoom
Forwarded from کدهک
آموزش DDD

در این دوره کتابخانه ی MediatR از مقدماتی تا پیشرفته آموزش داده میشود . درباره نحوه پیاده کردن Value Object و Entity و Domain Events و Aggregates ها صحبت می کنیم در ادامه به موضوع اعتبار سنجی، گزارش خطا، ذخیره سازی اطلاعات در دیتابیس های اسنادی و مفاهیمی چون Domain Events و Event Sourcing می پردازیم.

کد تخفیف 25 درصد : ddd

https://codehaks.com/go/ddd
Forwarded from کدهک
نتایج دور 20 بنچمارک Techempower اعلام شد

در حالی ترکیبی Composite نمره فریم ورک ASP NET Core برابر 6,462 شد و با 60 درصد در جایگاه هشتم قرار گرفت.

نمره ترکیبی یا Composite Score وزن کلی است که از مجموع همه تست ها بدست می آید و برای مقایسه کلی پرفورمنس فریم ورکهای وب استفاده میشود.

https://www.techempower.com/benchmarks/
آموزش gRPC در ASP.NET Core - قسمت دوم

در قسمت قبل با gRPC آشنا شدیم و یک پروژه سمپل با اون طراحی کردیم. در این قسمت میخواهیم به صورت عمیق تر مفاهیم gRPC از جمله Message و Service و انواع Data Type ها در Protocol Buffer و نیز تعریف Enum در آن را بررسی کنیم

#آرمین_شعیبی_نژاد
https://vrgl.ir/wvOn6
____________________
@DotNetZoom
بررسی عملی CQRS- بخش سوم: پروژه عملی با SQL Server و MongoDB

تا اینجای کار به صورت اجمالی با الگوی CQRS و همچنین به طور کامل با کتابخانه MediatR آشنا شدیم. در این قسمت قرار است که در یک پروژه عملی CQRS را در سطح دیتابیس با استفاده از SQL Server و Mongo DB پیاده سازی کنیم. همچین به مسئله Eventual Consistency میپردازیم و این تکنینک را با استفاده از Channel ها و Background Service ها در ASP Net Core پیاده سازی میکنیم

#بابک_طارمی
https://vrgl.ir/cibRC
____________________
@DotNetZoom
معرفی ویژگی جدید C# 9.0: ویژگی init-only

در نوامبر 2007 مایکروسافت C# 3.0 را با انتشار NET Framework 3.5. معرفی کرد. C# 3.0 بسیاری از مفاهیم جدید، به عنوان مثال زبان پرس و جو یکپارچه (LINQ) را ارائه داده است. همچنین مفهوم قدرتمند مقداردهی اولیه اشیاء را معرفی کرد. این‌ها پایه و اساسی برای ویژگی init-only هستند که با C# 9.0 معرفی شده است.

#سپهر_اسلامی
https://vrgl.ir/haBpx
___________________
@DotNetZoom
Forwarded from کدهک
مدیریت همزمانی با استفاده از EF Core

https://youtu.be/aRTKZ_320Y0
برترین افزونه های رایگان Visual Studio که هر کسی باید داشته باشه

🔰بهترین افزونه های Code Analyzer سی شارپ
این افزونه ها کد های شما رو آنالیز میکنن و اشتباهات رایج هنگام کدنویسی سی شارپب رو به همراه اصلاحات لازم رو بهتون پیشنهاد میده
از جمله موارد مهمی که توسط این کد آنالیزر ها میشه تشخیص داد:
✔️ کد هایی که Naming Convention و Coding Style استاندارد رو رعایت نکردن
✔️ کد های کثیف و Code Smell ها
✔️ کد هایی که به لحاظ ساختاری bug دارند یا مستعد bug هستند
✔️ کد هایی که به لحاظ آسیب پذیری دارند یا منسوخ شدند
✔️ پیشنهاداتی برای تمیز تر کردن کدتون و استفاده از ویژگی های جدید سی شارپ
✔️ پیشنهاداتی که باعث بهبود Performance میشه
🔸SonarLint - Nuget
🔹Roslynator - Nuget
🔸CodeCracker - Nuget
🔹CodeMaid
🔸Sharpen

🔰بهترین افزونه های Code Analyzer مخصوص Async/Await
این دو کد آنالیزر اشتباهات رایج هنگام کدنویسی async رو به همراه اصلاحات لازم بهتون پیشنهاد میدن
🔸AsyncFixer - Nuget
🔹AsyncMethodNameFixer - Nuget

🔰نمایش بهتر خطا ها و هشدار ها
یه افزونه باحال و کاربردی که خطا ها و هشدار های هر فایل رو داخل Solution Explorer کنار اون فایل نشون میده
🔸ErrorVisualizer

🔰فرمت خودکار کد ها به هنگام Save
افزونه محبوب من که کد ها رو موقع ذخیره، به صورت اتوماتیک Format میکنه (معادل میانبر Ctrl+K+D) در نتیجه همیشه کد هاتون فرمت شده و تمیز باقی میمونه بدون اینکه دغدغه اش رو داشته باشین یا یادتون بره
🔹FormatDocumentOnSave

🔰هایلایت متون پنجره Output
یه افزون کاربردی که متون پنجره Output رو highlight میکنه. خیلی وقتا جزئیات و اطلاعاتی از خطا ها داخل پنجره Output نمایش داده میشه که خوندنش خیلی بهتون کمک میکنه
🔸OutputEnhancer

🔰نکته:
بعضی از Code Analyzer ها پکیج Nuget هم دارند کنارشون که این امکان رو میده که بتونید ازش هرجا که NET CLI. هست استفاده کنین. مثلا توی VSCode و مهم تر از اون برای CI/CD، به این صورت که میتونین جز pipeline CD/DI تنظیمش کنین که اگر کدی خطا های Naming Convention یا Coding Style داشت متوجه بشین یا حتی اجازه ندین Pull Request اش Merge بشه
________________
@DotNetZoom
❇️ نکاتی در مورد کار با PDF در دات نت و برترین کتابخانه های آن

کتابخونه های کار با pdf به 2 دسته کلی تقسیم میشن

🔸دسته اول کتابخونه هایی هستند که باهاشون میشه فایل های PDF رو خوند، محتواشو Extract کرد، Edit کرد و یا فایل جدید ساخت
از معروف ترین این کتابخونه ها میشه به ترتیب به موارد زیر اشاره کرد
✔️iTextSharp
✔️
iTextSharp.LGPLv2.Core
✔️itext7
✔️PdfSharpCore
معروف ترین شون iTextSharp هست که فقط NET Framework Full. رو پشتیبانی میکنه اما وحید نصیری یه نسخه port شده ازش رو برای NET Core. رو براش درست کرده به نام iTextSharp.LGPLv2.Core
همچنین کتابخونه itext7 که توسط سازنده iTextSharp توسعه داده شده و به عنوان نسخه بعدی iTextSharp و با پشتیبانی از NET Core. اون رو توسعه داده و توصیه میکنه از itext7 استفاده کنین.

🔹دسته دوم کتابخونه هایی هستند که میتونن محتوای یه صفحه html (شامل المان ها و css ها و ...) رو به صورت PDF رندر کنن و خروجی PDF ازشون بگیرن
از جمله معروف ترین این کتابخونه ها میشه به ترتیب به موارد زیر اشاره کرد
✔️DinkToPdf
✔️itext7.pdfhtml
✔️Rotativa.AspNetCore
✔️Wkhtmltopdf.NetCore
طرز کار همشونم به این صورته که اینا معمولا wrapper ایی بر روی کتابخانه wkhtmltopdf هستند که کارش Render کردن خروجی html به pdf هست و پشت صحنه هم از موتور Qt WebKit استفاده میکنن که یک Browser Engine سورس باز هست

🔸اکثر مواقع نیاز برنامه نویسا همین دسته دوم هست. معمولا میخوان از گزارشاتشون خروجی pdf بگیرن که دسته دوم گزینه راحت تری هست چرا که اینجا ما دیگه با یه صفحه html+css سرو کار داریم و خیلی راحت میتونیم هر فرم و جدولی رو که بخوایم طراحی کنیم و وقتی از خروجی html ایی اون مطمئن شدیم اون رو به pdf تبدیل کنیم
دسته اول معمولا کاربرد خاص تری دارند. مثلا اگه بخواین فایل pdf تون رو بخونین، محتواش رو پردازش یا ویرایش کنین یا مثلا ساخت صفحاتتون رو خیلی سفارشی سازی کنین باید از کتابخونه های دسته اول استفاده کنین
یه سری کتابخونه قدرتمند دیگه هم هستند مثل Aspose و Syncfusion ولی چون اونا پولی هستند و نسخه رایگانشون محدودیت داره تو لیست نیاوردمشون
_______________
@DotNetZoom
❇️ اهمیت Side-effect Free و Idemponency در کدنویسی

برنامه نویسی Functional Programming (به اختصار FP) در تعریف، یک Paradigm (پارادایم) برنامه نویسی هست که در اون برنامه ها به کمک ترکیب توابع ساخته میشن. (چه تعریف گنگ و غیر ملموسی!)
از اونجایی که "پارادایم" کلمه غیر ملموسی هست و اگر اولین بارتون باشه که اون رو میشنوین احتمال زیاد مفهومش رو متوجه نمیشین اینطور تعریفش میکنم: پارادایم برنامه نویسی یعنی یک روش یا رویکرد برنامه نویسی.
این رویکرد مفاهیم مختلفی رو داخل خودش داره که اینجا نمیخوام واردشون بشم. چیزی که اینجا میخوام روش تاکید کنیم 3 مفهوم زیر هست:
1- Side-effect Free
2- Idempotent
3- Pure Functions

🔸مفهوم Side-effect Free
این مفهوم به این اشاره میکنه که یه تابع (متد) نباید "تاثیر جانبی" روی بقیه قسمت های برنامه داشته باشه. خب این یعنی چی؟ کی ما تاثیر جانبی رو بقیه میذاریم؟
وقتی متد ما یک shared state تغییر رو بده. shared state به معنی متغیر/مقدار ایی هست که بین چندین تابع یا قسمت مختلف برنامه مشترک هست.
پس در واقع وقتی یک تابع، متغیری یا مقداری را که بین چندین تابع یا قسمت های مختلف برنامه مشترک هست رو "تغییر" بده یعنی side-effect اتفاق افتاده

در کنار این مفهوم، مفهوم دیگری نیز وجود داره به نام Avoiding Shared State که تاکید میکنه از ایجاد و استفاده از shared state ها خودداری کنیم.
وجود shared state خواسته یا ناخواسته باعث بروز side-effect میشه. پس خودداری از اون باعث میشه به side-effect نیز برنخوریم یا کمتر بر بخوریم

🔹مفهوم Idempotent
این مفهوم به این امر اشاره میکنه که زمانی توابع ما Idempotent هستند که اگر اونها رو هرچند بار هم با مقادیر ورودی ثابت و مشابه فراخوانی کنیم همیشه نتیجه یا خروجی یکسان و ثابتی داشته باشه
مثلا تابعی که یک مقدار Random رو برمیگردونه Idempotent نیست چرا که هربار نتیجه اش متفاوته؛ همینطور تابعی که DateTime.Now رو برمیگردونه.

مثال کاربردیش توی دنیای واقعی، متدی میشه که وظیفه حذف یک رکورد رو داره. به این صورت که (مثلا از EF استفاده میکنه و) ابتدا رکورد رو با id مورد نظر واکشی میکنه سپس اون رو به متد Remove میده و SaveChanges فراخوانی میشه
خب بار اولی که این متد رو با id برابر با 100 فراخوانی کنیم اون سطح حذف میشه ولی بار دومی که اون رو "با همین id" فراخوانی میکنیم به exception بر میخوره چرا که دیگه اون رکورد وجود نداره که بخواد حذفش کنه (موقع find، مقدار اون رکورد null هست و متد Remove با ورودی null خطا میده)
ولی همین متد رو اگر به این صورت پیاده سازی کنیم که قبل از حذف کردن، چک کنه که اگر این رکورد وجود نداره کاری انجام نده، متد ما Idempotent میشه چرا که هر چندبار فراخوانی اون، یک نتیجه رو داره و اون هم اطمینان از حذف اون رکورد هست

▪️مفهوم Idempotent بودن توی معماری Event-Driven و الگوی Pub/Sub هم اهمیت بسیار بالایی داره. از اونجایی که یک Event یا Message ممکنه به هر دلیلی "بیش از یکبار" توسط Subscriber ها پردازش بشه. باید اطمینان داشته باشیم که نتیجه یکسانی داره و عملکرد سیستم رو تحت تاثیر نمیگذاره (مثلا فرض کنید برای یک سفارش، دو تا فاکتور برای مشتری ثبت بشه!)

▪️نمیخوام خیلی وارد روش های Idempotency بشم فقط اینکه معمولا 2 روش وجود داره:
1- طوری پیاده سازی کنیم که چند دفعه اجرا شدنش توی عملکردش تاثیری نداشته باشه
2- یک flag ایی رو به ازای هر Message داشته باشیم که وقتی اون Message پردازش میشه اون رو true کنیم و دفعات بعدی با چک کردن این flag و متوجه شدن از اینکه قبلا پردازش شده، دیگه پردازشش نکنیم (در این حالت ممکنه استفاده از تکنیک های synchronization مانند locking لازم باشه)

🔸مفهوم Pure Functions
این مفهوم تعریف خیلی ساده ای داره، تابعی Pure Function (خالص) هست که هم Side-effect Free باشه هم Idempotent. در غیر این صورت میشه Impure Function (تابع ناخالص)

🔰جمع بندی
مفاهیم Functional Programming الزاما نیاز به استفاده از زبان های FP (مثل FSharp یا Scala یا Haskell) ندارن. خیلی از اون مفاهیم به راحتی داخل زبان های دیگه و رویکرد Object Oriented Programming نیز قابل استفاده و بسیار مفید هستند و باعث Maintainability و Reliability میشن (نگهداری بهتر کد ها و قابل اعتماد تر بودنشون)
توصیه میکنم که اون مفاهیم رو یاد بگیرید و بسته به نیازتون توی کدنویسی های OOP تون هم ازش استفاده کنید


🔰دوستان یه مقدارش جا نشد. (مخصوصا قسمت مزایاشون)
متن کامل رو توی مقاله زیر بخونین
https://vrgl.ir/GMNeu
______________
@DotNetZoom
Forwarded from کدهک
بررسی و مقایسه کلمات کلیدی in و out و ref در سی شارپ

https://youtu.be/9_eDA-uzHhw
سری آموزشی ساخت برنامه با ASP.NET Core و Angular

🔸سری 50 قسمتی آموزش ویدئویی
Build Real App in Angular 11 and .Net Core Web API

🔹سری 11 قسمتی
ASP.NET Core with Angular Application Architecture
Part 1
Part 2
Part 3
Part 4
Part 5
Part 6
Part 7
Part 8
Part 9
Part 10
Part 11

🔸سری 4 قسمتی
Full-stack application development with AngularJS 11 and Asp.Net MVC Core 5.0
Part 1
Part 2
Part 3
Part 4
_________________
@DotNetZoom
برای اینکه بتونیم خوب در مورد کارمون تصمیم بگیریم، مهمترین چیز اینه که بدونیم وضع کلی زندگی و بازار چطوریه. امسال هم مثل هر سال نظر سنجی بزرگ برنامه نویسان و مدیر سیستم ها رو داریم که نتایجش مثل هر سال آزاد برای همه در دسترسه!
شرکت و پخشش، به نفع همه ماست
bit.ly/irprogrammers

این نظر سنجی چند ساله که برگزار می شه و خروجی هاش به طور خام و کامل در اختیار همه هست. تا شاید بتونیم تصمیم های بهتری بگیریم، روند بازار رو ببینیم یا تشخیص بدیم که باید چیکار کنیم. اگر برنامه نویس / مدیر سیستم هستین، شرکت توش، کمک به خودمونه. خندون باشین و به بقیه هم بگین (:
تست های شما باید ایزوله باشند

در حالت ایده آل، یک تست باید "کاملا" از سایر تست ها "ایزوله" باشه.
این امر موجب میشه تست ها هیچ تاثیری (side effect) روی هم نداشته باشند و ترتیب اجراشونم به هم بستگی نداشته باشه در نتیجه میتونیم براحتی اون ها رو به صورت موازی (Parallel) اجرا کنیم

این امر در بر نامه های وب مخصوصا از اهمیت بیشتری برخوردار میشه چرا که به دلیل ماهیت برنامه های وب، که درخواست ها به صورت موازی اجرا میشن، موازی اجرا شدن تست ها باعث میشه اطمینان خاطر بیشتری به عملکرد کد ها پیدا کنیم

مثلا فرض کنید برنامه نویسی اشتباها از روشی توی کدش استفاده کرده باشه که side effect داره (مثلا ذخیره Username کاربر جاری تو یه متغیر "static") در این صورت با موازی اجرا کردن تست ها به خطا میخوریم و متوجه ایراد کار میشیم ولی با اجرای ترتیبی (Sequential) خیر

اینکه چطور توابع side-effect free (بدون تاثیر جانبی) و بالا تر از اون pure functions (توابع خالص) ایجاد کنیم از مباحث Functional Programming (به اختصار FP) هست که اکیدا پیشنهاد میکنم اونها رو مطالعه کنید

در حالت ایده آل هیچ تستی نباید به نتیجه تست قبلیش وابستگی داشته باشه یا تاثیری روی تست بعدی بگذاره
از طرفی یه تست زمان بر، انگیزه برنامه نویس برای اجرا تست رو به شدت کم میکنه
اگه 1000 تا تست داشته باشید که هر کدوم 1ثانیه طول میکشه، ترتیبی بودنش 16 دقیقه زمان میبره در صورتی که موازی بودنش (با فرض اینکه pc شما 8 عدد logical processor یا thread واقعی داره) این زمان به 2 دقیقه کاهش پیدا میکنه

پس توصیه میکنم همیشه سعی تون بر این باشه که تست ها کاملا ایزوله باشن و به صورت Parallel اجرا بشن مگر جایی که واقعا راهی وجود نداشته باشه

▪️در این ویدئو نیز Kent Beck (خالق متدولوژی XP و روش TDD) در مورد اهمیت و چرایی این موضوع صحبت میکنه
Tests Should Be Isolated (from each other)
__________________
@DotNetZoom
🌹تبریکی به وسعت تعداد اعضای کانال🌹

امروز یکم فروردین 1400، که دارم این پست رو میذارم دقیقا 5 سال و 2 ماه و 18 روز از تاریخ تاسیس کانال میگذره و تو این سال ها بیش از 1,100 عدد پست، تولید محتوا و منتشر شده توی کانال

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

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

و اما در این لحظه بسیار خوشحالم و افتخار میکنم که در کنار شما عزیزان (تا این لحظه 3,477 عضو واقعی که انشالا به زودی 4,000 رو هم رد میکنیم) و به لطف همراهی شما عزیزان تونستیم به عنوان «بزرگترین کانال تخصصی دات نت در کشور» شناخته بشیم که از این بابت بسیار خدا رو شاکر هستم و امیدوارم که این کانال برای شما عزیزان هم مفید واقع شده باشه

در اینجا میخوام 3تا تشکر بکنم
1- میخوام اولا از دوستانی که منو در این زمینه یاری کردند تشکر کنم از جمله: زهرا موحدی، علی عبدالملکی، بابک طارمی و آرمین شعیبی نژاد. (شما دوستان هم اگر علاقمند به تولید محتوای داوطلبانه بودین پی وی بنده پیام بدین)

2- دوما از عزیزان دوست و همکاری که ما رو حمایت کردند تشکر کنم از جمله : کانال فلسفه نرم افزار از مهران داوودی - کانال برنامه نویس از مهدی کرامتی و کانال کدهک از حکیم قدس

3- سوما از همه شما هایی که عضو کانال هستین، به بنده لطف دارین و بنده رو توی این سالها همراهی کردین.

و در آخر سال نو رو به تک تک شما اعضای کانال تبریک میگم و امیدوارم سالی توام با سلامتی، شادکامی و موفقیت داشته باشین 🌹
دوست دار شما #محمدجواد_ابراهیمی
____________________
@DotNetZoom
آموزش Caching با استفاده از Redis در ASP Net Core

در این مقاله به طور اجمالی با caching در Redis و استفاده از آن در ASP Net Core آشنا میشویم. به طور کلی Distributed Caching می تواند در مقیاس بالا به افزایش پرفرمنس کمک کند و یکی از ابزار های بسیار کاربردی آن Redis می باشد

#بابک_طارمی
https://vrgl.ir/h7wi6
______________
@DotNetZoom
#سری_معرفی_وسایت_های_برتر

معرفی 10 سایت برتر (سری ششم)
در مورد
#C و NET Core. و ASP.NET Core

🔸توی این سری پست ها هربار 10 وبسایت برتر که از نظر سطح علمی و کیفیت محتوا، بروز و متنوع بودن بهترین هستند رو معرفی میکنم
اینا منابعی هستند که معمولا خودم دنبالشون میکنم

1️⃣ https://jimmybogard.com/
2️⃣ https://jonhilton.net/
3️⃣ https://rimdev.io/
4️⃣ http://josephwoodward.co.uk/
5️⃣ https://dotnetkicks.com/
6️⃣ https://www.mikesdotnetting.com/
7️⃣ https://blog.jeremylikness.com/
8️⃣ https://www.davideguida.com/
9️⃣ https://tyrrrz.me/blog
🔟 https://swimburger.net/
_____________
@DotNetZoom
مفهوم Expression Tree در دات نت

میشه گفت یکی از advanced ترین قسمت های دات نت، مفهوم Expression Tree و کلاس Expression هست که یه جورایی قلب IQueryable رو هم تشکیل میده
شاید نهایت استفاده افراد، کار با <<Expression<Func برای شرط های predicate بر روی متد Where و یا selector برای متد Select باشه
ولی Expression خیلی بزرگتر از اینهاست

🔸درواقع مفهوم Expression Tree به مجموعه از از node ها در قالب یک ساختار درختی گفته میشه که هر node اون، خود یک Expression هست. اما خود Expression چیه؟
درواقع هر Expression یک operation (عملیات) برنامه نویسی رو بیان میکنه. توسط کلاس Expression در دات نت میتوان برای هر عملیات برنامه نویسی یک expression ساخت.

🔹به عنوان مثال:
- تعریف یک variable (متغیر)، constant یا parameter (پارامتر ورودی متد)
- انتصاب یک مقدار به یک variable یا parameter
- جمع، تفریق، ضرب، تقسیم و... کردن دو مقدار
- تعریف یک شرط (if/else) یا سویچ (switch) منطقی
- تعریف یک حلقه (for یا while)
- بازگرداندن (return کردن) خروجی متد
- فراخوانی یک متد، پاس دادن پارامتر های ورودی و گرفتن مقدار خروجی
- و... اکثر کار هایی که شما توسط کد نویسی میتونین انجام بدین

🔸فرق expression با کد نویسی معمولی برای operation های برنامه نویسی اینه که توسط Expression میتوان یک ساختار (data structure) قابل توصیف برای کد ها ایجاد کرد.
در نتیجه میتوان از روی این ساختار قابل توصیف، کار های متفاوت و خلاقانه ای انجام داد. مثلا میشه از روی ساختار کد هامون Transpilation انجام بدیم و کوئری (مثلا SQL) معادل اون رو تولید کرد.

🔹در واقع هنگامی که شما یک عبارت lambda رو به یکی از متد های linq که ورودی <Expression<Func داره پاس میدین، پشت صحنه به هنگام Compile یک LambdaExpression از روی عبارت lambda شما ساخته میشه و اون هست که به متد شما پاس داده میشه.
چرا؟ چون که ساختار کد شما رو لازم داره تا بتونه از روی اون Transpilation انجام بده و کوئری (مثلا SQL) معادل اون رو تولید کنه. (این مثال رو ببینید)

🔸یا حتی میتوان به کمک Transpilation، از روی یک expression یک عبارت readable (خوانا) جهت توصیف کاری که قراره انجام بده تولید کرد. همانند کاری که کتابخانه ReadableExpressions کرده و توسط افزونه ویژوال استادیو ReadableExpressions.Visualizers این امکان رو میده که به هنگام دیباگ بتونین یک readable view از روی expression هاتون ببینید

🔹کار دیگه ای که توسط Expression میشه انجام داد. تولید کد IL (مخفف Intermediate Language) از روی اون هست. مثلا شما نمیتونین توسط Reflection حتی، یک متد جدید (شامل مجمومه ای از operation ها) ایجاد کنین ولی توسط Expression میتونین به جای اینکه کد شما به هنگام compile تبدیل به IL بشه، اون رو به هنگام run-time (در زمان اجرای برنامه) از روی همون expression (که یک ساختار قابل توصیف از یک تیکه کد هست) به کد IL تبدیل کنین یا اصطلاحات Emit کنین (بیرون بدین)
در نتیجه میتونین به هنگام run-time کد جدید تولید کنین و این همون تکنیکی هست که کتابخانه های Object Mapper از جمله AutoMapper و Mapster و... از اون استفاده میکنن

🔸گفتم Emit، جا داره از Reflection.Emiit هم یادی بکنیم که پایه ای ترین روش برای تولید کد IL در زمان run-time هست و میشه Expression رو به عنوان یک wrapper روی Reflection.Emit محسوب کرد که کار با اون رو ساده تر میکنه. هرچند کار هایی میشه با Reflection.Emit انجام داد که توسط Expression Tree نمیشه انجام داد (و بلعکس) پس اینجا به هیچ عنوان جایگزین هم نیستند بلکه فقط توی تولید کد IL وجه مشترک دارند.

🔰 جمع بندی
قابلیت Expression Tree یک قابلیت پیشرفته هست و نیاز اکثر افراد نمیشه ولی مزایای غیر قابل چشم پوشی ایی رو به ما میده که حرفه ای ها میتونین کار جالبی باهاش بکنن. توسط این قابلیت که یکی از جذاب ترین امکانات دات نت هست میتونین کار های جالبی انجام بدین از جمله:
1️⃣ گردش روی node ها و فهمیدن ساختار کد (MetaProgramming)
2️⃣ ترجمه کد ها به یک زبان دیگر (Transpilation)
3️⃣ تولید کد IL از روی اون (Code Generation)

💎در آخر یکی از بهترین مقالاتی که این مفهوم رو به خوبی به همراه مثال توضیح داده مقاله زیر هست که پیشنهاد میکنم حتما بخونین
https://tyrrrz.me/blog/expression-trees
____________________
@DotNetZoom
❇️ معرفی 20 کتاب برتر برای برنامه نویسان (فارغ از نوع تکنولوژی)

اگه اهل کتابخوندن هستین لیست زیر برترین و محبوبترین کتابهای برنامه نویسی هست که برای هر برنامه نویس فارغ از استک و نوع تکنولوژیش مفید هست

1- Clean Architecture
2- Clean Code
3- The Clean Coder
4- The Pragmatic Programmer
5- Patterns of Enterprise Application Architecture
6- Head First Design Patterns
7- Design Patterns: Elements of Reusable Object-Oriented Software
8- Working Effectively with Legacy Code
9- Refactoring: Improving the Design of Existing Code
10- Domain-Driven Design: Tackling Complexity in the Heart of Software
11- Patterns, Principles, and Practices of Domain-Driven Design
12- Domain-Driven Design Distilled
13- Implementing Domain-Driven Design
14- Test Driven Development
15- Growing Object-Oriented Software, Guided by Tests
16- Working Effectively with Unit Tests
17- The Art of Unit Testing
18- BDD in Action
19- Soft Skills
20- Code Complete

🔰من لینک آمازون کتاب ها رو قرار دادم و بهتره که حامی قانون کپی رایت باشیم هرچند اونایی که میخوان رایگان دانلود کنن به هرحال راهشو بلدن
____________________
@DotNetZoom