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
Forwarded from کدهک
رویداد NET Conf تا کمتر از 24 ساعت دیگر برگزار میشود.

قرار است در این رویداد نسخه نهایی دات نت 5 به همراه EF Core 5.0 عرضه شود.

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

https://www.dotnetconf.net
Forwarded from کدهک
وضعیت جاری دات نت

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

نسخه نهایی 5.0 امروز منتشر شد. این نسخه پشتبانی موقت(یک ساله) داره و بعد از ارائه نسخه 6 دیگر پشتیبانی نخواهد شد. نسخه 6 پشتیبانی بلند مدت (LTS) خواهد داشت.

قرار بود Mono/Xamarin در نسخه 5.0 یکپارچه سازی شود ولی با توجه به کرنا انتقال آن ممکن نشده و به نسخه 6.0 دات نت موکول شده است.

قرار نیست Web Formو Workflowو WCF به دات نت جدید منتقل شوند.
لیست مطالب مهم NET 5.0. و کنفرانس Net Conf.

ببینید دوستان حجم مطالب منتشر شده توی رویداد NET Conf. خیلی زیاده. قبلا هم بخشی از تغییرات رو دوستان به فارسی کار کردند و اگه پیگیر اخبار جدید دنیای دات نت تو این کانال یا کانالهای همکار بوده باشین احتمالا اون ها رو دیدن.
الان اما بهترین کار به نظرم اینه که این آخر هفته ایه رو بذارین و این مقالات رو مطالعه کنین، خودمم میخوام همین کارو بکنم.
واسه همین لیست کامل مطالب مهم دات نت 5.0 رو اماده کردم و امیدوارم براتون مفید واقع بشه (لیست رو هم آپدیت نگه اش میدارم)
انشالا اگه خودم یا بقیه دوستان مطلبی اماده کردیم حتما باهاتون به اشتراک میذارم. شاد و پیروز باشین 🌹

🔰 معرفی ها و Release های جدید
💎 Announcing .NET 5.0
https://devblogs.microsoft.com/dotnet/announcing-net-5-0/

💎 Announcing ASP.NET Core in .NET 5
https://devblogs.microsoft.com/aspnet/announcing-asp-net-core-in-net-5/

💎 Announcing the Release of EF Core 5.0
https://devblogs.microsoft.com/dotnet/announcing-the-release-of-ef-core-5-0/

💎 C# 9.0 on the record
https://devblogs.microsoft.com/dotnet/c-9-0-on-the-record/

💎 Visual Studio 2019 v16.8 and v16.9 Preview 1 Release Today
https://devblogs.microsoft.com/visualstudio/visual-studio-2019-v16-8/

💎 Announcing the Release of the Git Experience in Visual Studio
https://devblogs.microsoft.com/visualstudio/announcing-the-release-of-the-git-experience-in-visual-studio/

💎 What’s new in .NET Productivity
https://devblogs.microsoft.com/dotnet/whats-new-in-net-productivity/

💎 Recapping Xamarin Highlights from .NET Conf 2020
https://devblogs.microsoft.com/xamarin/dotnetconf-2020-xamarin-recap/

💎 Windows Terminal Preview 1.5 Release
https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-5-release/

💎 Getting Started With NuGet 5.8
https://devblogs.microsoft.com/nuget/getting-started-with-nuget-5-8/

🔰 لیست تغییرات جدید
💎 What's new in .NET 5
https://docs.microsoft.com/en-us/dotnet/core/dotnet-five

💎 What's new in ASP.NET Core 5.0
https://docs.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-5.0?view=aspnetcore-5.0

💎 What's New in EF Core 5.0
https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-5.0/whatsnew

💎 What's new in C# 9.0
https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9

🔰 راهنمای مهاجرت و break change ها
💎 Migrate from
ASP.NET Core 3.1 to 5.0
https://docs.microsoft.com/en-us/aspnet/core/migration/31-to-50

💎 Breaking changes for migration from version 3.1 to 5.0
https://docs.microsoft.com/en-us/dotnet/core/compatibility/3.1-5.0

🔰 ویدئو های رویداد NET Conf.
💎 .NET Conf 2020 - Day 1/3
https://www.youtube.com/watch?v=mS6ykjdOVRg
💎 .NET Conf 2020 - Day 2/3
https://www.youtube.com/watch?v=Uq4qyHi3sYM

💎 مثال هایی از دات نت 5.0
https://gist.github.com/richlander/50c34a8714eb3436e5d9d4d5d420776e

💎 آموزش جامع سی شارپ 9.0 از وحید نصیری
https://www.dotnettips.info/learningpaths/details/101

🔰لازم به ذکره که NET 5.0. و ASP.NET Core 5.0 تغیرات شکننده (breaking changes) مهم و پرکاربردی نداشته و به راحتی میتونین پروژه هاتون رو از NET Core 3.1 به NET 5.0 آپگرید کنین و از پرفرمنس بیشتر و قابلیت های جدیدش لذت ببرین✌️
________________
@DotNetZoom
❇️ بلوغ System.Text.Json در دات نت 5.0

کتابخانه Json Serializer داخلی دات نت تحت عنوان System.Text.Json در NET Core 3.0 معرفی شد و به منظور پرفرمنس و یکپارچگی بیشتر، به عنوان سریالایزر پیشفرض ASP.NET Core 3.0 قرار گرفت و نیز برای استفاده از Json.NET که تا قبل از اون، سریالایزر پیشفرض ASP.NET Core بود، یک پکیج جداگانه اضافه شد تا بشه اون رو توی ASP.NET Core تنظیمش کرد.

🔸کتابخونه System.Text.Json اما، یک سری نواقص و مشکلات اساسی داشت که باعث میشد خیلی برای استفاده در محیط Production مناسب نباشه مثلا:

1️⃣ اگه 2تا شی داشته باشین که به هم دیگه دارن رفرنس میدن، موقع سریالایز با خطا مواجه میشدین (که اصطلاحا بهش Reference Loop یا Circular References میگن)
این یک امکان مهم و اساسی لازم برای سریالایز ها هست و متاسفانه نه تنها پشتیبانی نمیکرد بلکه راه حل workaround ایی هم نداشت!

2️⃣ مشکل بعدی اینکه مثلا اگه شما یه پروپرتی عددی به نام Age داشته باشین و سمت کلاینت مقدار json اش رو به صورت رشته ای (string) ارسال کنین به سرور (دقت کنید مقدار عددی داخل "" (Quote) محصور شده.)
{
Age: "27"
}
تا قبل از این با Exception مواجه میشدین چرا که به صورت پیشفرض مقادیر عددی رو فقط میتونست به صورت عددی Serialize و Deserialize کنه. یعنی به این صورت
{
Age: 27
}
البته این مشکل، راه حل workaround داشت که اینجا میتونین ببینین ولی به صورت پیشفرض این امکان رو نداشت

3️⃣ مشکل بعدی اینکه اگه کلاس شما سازنده پیشفرض یا بدون پارامتر نداشت موقع Deserialize به خطا میخوردین؛ همچنین از Field ها و non-public Property ها هم پشتیبانی نمیکرد.

🔸خوشبختانه اما، در دات نت 5.0 تمامی این مشکل ها برطرف شده و به سطحی از پختگی و بلوغ رسیده که بشه بدون نگرانی ازش استفاده کرد. همچنین کلی بهبود پرفرمنسی و تعدادی فیچر جدید هم اضافه کرده از جمله:

لیست بهبود ها و فیچر های جدید

✔️ بهبود پرفرمنسی 2.4 برابری در Serialize و 1.5 برابری در Deserialize (بنچمارک ها اینجا و اینجا)

✔️ برطرف شدن مشکل ReferenceLoopHandling (یا همون Circular References) به واسطه اضافه شدن تنظیم جدید ReferenceHandler.Preserve (مشابه PreserveReferencesHandling.Ignore در Json.Net) (نمونه مثال)

✔️ اضافه شدن پشتیبانی از Serialize و Deserialize مقادیر عددی به صورت string ایی توسط تنظیم جدید NumberHandling

✔️ پشتیبانی از Serialize و Desersialize مقادیر Field ها و non-public Properties توسط تنظیم جدید IncludeFields (نمونه مثال)

✔️ پشتیبانی از Serialize و Desersialize نوع record معرفی شده در سی شارپ 9.0 (نمونه مثال)

✔️ پشتیبانی از immutable struct و اضافه شدن اتریبیوت [JsonConstructor] برای مشخص کردن سازنده پیشفرض جهت نمونه سازی به هنگام Deserializing (نمونه مثال)

✔️ بهبود پشتیبانی از نوع Dictionary<K,V> l برای کلید های غیر string ایی (نمونه مثال)


🔰اطلاعات بیشتر
▪️اگر دنبال مقاله فارسی هستین برای System.Text.Json که اکثر موارد مهم رو پوشش داده باشه، این مقاله رو پیشنهاد میکنم
▪️اینجا هم میتونین لیست Breake-Change های سریالایزر در دات نت 5.0 رو مطالعه کنین
و نهایتا اگه میخواین به زیر و بم System.Text.Json مسلط بشین بدون شک این 2تا لینک بهترین هستند
▪️داکیومنت مهاجرت از Newtonsoft.Json به System.Text.Json
▪️داکیومنت کامل استفاده از System.Text.Json
_______________
@DotNetZoom
تست راحت تر کد های سی شارپ با C# Interactive

خیلی وقتا نیازمون میشه یه کد سی شارپ رو فقط تست کنیم. یه راهش اینه که یه اپ Console بسازیم ولی یه برنامه نویس خوب همیشه از ابزار های مناسب اون کار استفاده میکنه و برای اینکار ابزار های راحت تر و بهتری هم وجود داره، مثل C# Interactive

🔸این ابزار خیلی کار راه بندازه و زمانی که ویژوال استادیو جلوتون بازه بهترین انتخابه
این ابزار بهمون اجازه میده در لحظه یه کدی رو تست کنیم؛ نیاز به ساختن پروژه جدید نداره و لود خیلی سریعی داره؛ میتونیم dll رفرنس بدیم به کدمون یا یه فایل noscript ایی که قبلا نوشتیم رو load و اجرا کنیم و...
به این قابلیت C# REPL یا CSI هم میگن. همچنین توسط کامند csi توی کامند لاین هم قابل استفاده هست.

🔹کلا کار باهاش که خیلی راحته و بعد یه مدت به ابزار روزمره تون تبدیل میشه ولی فقط نکته رو بدونین (هرچند که توی 2تا لینک بالا کامل توضیح داده) اونم اینه که خیلی وقتا لازم میشه یه یه dll ایی رفرنس بدیم که قبلا رفرنس نبوده
مثلا میخواین با کلاس SqlConnection کار کنین، از اونجایی که "System.Data" به صورت پیشفرض رفرنس نشده شما فقط کافیه اونو با r# رفرنس کنین. همین. مثال:
> #r "System.Data"
> using System.Data.SqlClient;
> var sql = new SqlConnection("myconn");

🔰یه بار این ویدئو یا مقاله زیر رو ببینین تا کامل متوجه طرز کارش بشین
https://dzone.com/articles/c-interactive-in-visual-studio
https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2015/103
___________________
@DotNetZoom
معرفی محبوب ترین کتابخانه های "رایگان" کار با Excel در دات نت

یکی از محبوب ترین کتابخونه کار با اکسل در دات نت، کتابخونه EPPlus هست. این کتابخونه تا مدت زیادی رایگان بود ولی متاسفانه از نسخه 5 اش به بعد پولی شد و لایسنس لازم داره

در این شرایط همچنان میشه از آخرین نسخه قبل از 5 اش، یعنی 4.5.3.3 استفاده کرد که لایسنس نمیخواد ولی خب طبیعتا از آپدیت و بهبود های بعدیش محروم میمونید

در زمره بهترین کتابخونه های رایگان کار با اکسل میشه به موارد زیر اشاره کرد که اولی محبوب ترین هست و سه تای بعدی تقریبا تو یه مایه هستند. همشون هم NET Core. رو پشتیبانی میکنن
🔸 کتابخونه OpenXml
🔹 کتابخونه ExcelDataReader
🔸 کتابخونه NPOI
🔹 کتابخونه ClosedXML

از طریق لینک زیر میتونین محبوبیت (نمودار تعداد دانلود) این کتابخونه ها رو ببینین و با هم مقایسه کنین
https://nugettrends.com/packages?months=12&ids=DocumentFormat.OpenXml&ids=EPPlus&ids=ExcelDataReader&ids=NPOI&ids=ClosedXML
__________________
@DotNetZoom
❇️ فعال سازی سطح دوم کش روی EF Core توسط EFCoreSecondLevelCacheInterceptor

قبلا کتابخانه EFSecondLevelCache.Core رو معرفی کرده بودیم
توسط این کتابخانه میتونین کش سطح دوم (second level caching) رو روی EF Core فعال کنین. در واقع میتونین نتیجه کوئری هاتون رو کش کنین تا دفعه بعد، به جای دیتابیس، از کش خونده بشه.
این کتابخانه توسط وحید نصیری عزیز، مدیر سایت dotnettips.info نوشته شده است.

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

🔰مزیت این کتابخونه نسبت به قبلی اینه که :
🔹کار باهاش ساده تره
🔸به دلیل استفاده از Interceptor پرفرمنس بالاتری داره
🔹یه سری از باگ ها و محدودیت هایی که قبلی داشت رو دیگه نداره
🔸و وابستگی به کتابخونه شخص ثالث برای Caching نداره و از Abstract های خود دات نت استفاده میکنه

🔰 نکته :
✔️اکیدا پیشنهاد میکنم اگه از قبلی استفاده میکردین، به پکیج جدید مهاجرت کنین (ضمن اینکه کتابخانه قلبی Archive شده و دیگر توسعه داده نمشه)
✔️کشینگ همیشه ازش به عنوان یه شمشیر "دو لبه" یاد میشه که اگه با علم کافی و به جا ازش استفاده نکنین و حواستون به Invalidate کردن ایتم های کش شده نباشه، سیستم رو دچاره مشکل میکنه
خوبی این کتابخونه اینه که بحث Invalidate کردن رو به صورت خودکار انجام میده و دیگه نگرانیی بابت اون نخواهید داشت، پس افرادی که توی این مبحث واقعا بزرگ (Caching) حرفه ای هم نیستن راحت تر میتونن تو پروژه هاشون ازش استفاده کنن

https://github.com/VahidN/EFCoreSecondLevelCacheInterceptor
___________________
@DotNetZoom
آموزش معماری تمیز (Clean Architecture) + سورس کد بهترین پیاده سازی ها

اکثر مقالاتی که این معماری رو به صورت کلی و انتزاعی توضیح دادند ممکنه برنامه نویس رو به خوبی شیرفهم نکنه مخصوصا وقتی با مفاهیمی آشنا میشن که شاید تا قبل نمیشناختین یا معادلی براش توی ذهنتون ندارین مثل Interactor و Interface Adapters و Drivers!
این موضوع حتی برای منبع اصلی Clean Artchiture یعنی مقاله شخص Robert C Martin (معروف به Uncle Bob) هم صدق میکنه هرچند که خیلی جامع و کامل توضیح داده ولی برای یه برنامه نویس سی شارپی ممکنه مبهم به نظر بیاد، مادامی که پیاده سازی عملی ازش رو نبینه.
همچنین خیلی از مقاله ها با دخیل کردن بیش از حد مورادی چون DDD و CQRS و ...، فهم اصل موضوع Clean Architecture رو برای مخاطب سخت میکنن.

🔸مقاله زیر خیلی ساده و روان و البته مختصر و مفید به توضیح معماری تمیز پرداخته و در آخر هم رفرنس های خوبی رو معرفی میکنه که پیشنهاد میکنم حتما ببینیدشون
https://www.dandoescode.com/blog/clean-architecture-an-introduction/

🔹و اما بریم سر اصل مطلب یعنی پیاده سازی؛ پیاده سازی های مختلفی از این معماری وجود داره توی اینترنت و گیتهاب که هرکس معمولا بنا به فهم و سلیقه خودش اومده یه پروژه ای ساخته که بعضا اشتباه هم هستند و صرفا اسم Clean Architecture رو به دوش میکشند

1️⃣ بهترین پیاده سازی هایی که من دیدم به ترتیب اینا هستند
https://github.com/jasontaylordev/CleanArchitecture
🔰آموزش ویدئویی این مورد توی یوتیوب هم هست که برای درک بهتر خیلی بهتون کمک میکنه
https://www.youtube.com/watch?v=5OtUm1BLmG0
https://jasontaylor.dev/clean-architecture-getting-started/

2️⃣ پیاده سازی بعدی توسط ardalis تهیه شده و ویدئو اش هم توی یوتیوب قرار داده شده
https://github.com/ardalis/CleanArchitecture

3️⃣ پیاده سازی بعدی هم خوبه و توضیحات بیشترش توی wiki خود ریپازیتوری و پست های وبلاگ نویسنده (1 و 2 و 3) + پلی لیست ویدئو هاش تو یوتیوب خود نویسنده قرار داده شده
https://github.com/ivanpaulovich/clean-architecture-manga


4️⃣ و در اخر پیاده سازی زیر که به همراه پست بلاگ نویسنده قرار داده شده
https://github.com/mmacneil/CleanAspNetCoreWebApi
________________
@DotNetZoom
❇️ معرفی چندتا از بهترین Workflow Engine های دات نتی

یکی از دوستان سراغ کتابخونه Workflow دات نتی گرفت رفتم یه سرچی زدم خوباشو پیدا کردم گفتم با شما هم به اشتراک بذارم

💎اینا بهتریناشون هستند. همشونم رایگان و اوپن سورس
https://github.com/danielgerlag/workflow-core

https://github.com/UiPath/corewf

https://github.com/aelassas/Wexflow

https://github.com/akarpov89/MicroFlow

✔️این یکی چیز جالبی به نظر میرسه امکانات خوبی داره و یه دیزاینر Blazor ایی هم داره
https://github.com/elsa-workflows/elsa-core

✔️این یکی خیلی قویه، یه دیزاینر html ایی هم داره اما پولیه (البته یه پلن رایگان با امکانات محدود تر هم داره)
https://github.com/optimajet/WorkflowEngine.NET

🔰اینم مقایسه محبوبیتشون توی Nuget
https://nugettrends.com/packages?months=12&ids=WorkflowEngine.NET-Core&ids=WorkflowCore&ids=MicroFlow&ids=Wexflow
_______________
@DotNetZoom
Forwarded from کدهک
استفاده از dotnet watch در ویژوال استودیو

https://youtu.be/zNtHPdABDQI
❇️ طراحی یک برنامه‌ی Monolith به صورت ماژولار به کمک DDD

🔸ریپازیتوری زیر یکی از برترین آموزش های توسعه نرم افزار های دات نت مبتنی بر DDD هست که در اون به صورت جامع و عملی، همه موارد رو پوشش داده
در این آموزش، از ب بسم الله شروع میکنه و نیازمندی های پروژه رو به روش Event Storming تحلیل میکنه، سپس گام به گام به صورت عملی تا آخرین مرحله، هر قسمت رو توضیح میده و پیاده سازی میکنه.
در آخر هم سورس کامل پروژه وجود داره که میتونین با بررسی کد های اون دانسته های خودتون رو تثبیت کنین

🔹مواردی که در این پروژه آموزش و پیاده سازی شده:
✔️Event Storming
✔️Domain-Driven Design
✔️Modular Design
✔️CQRS
✔️Event Sourcing
✔️Event Bus pub/sub
✔️Unit Tests
✔️Integration Tests

🔰ریپازیتوری گیتهاب (آموزش + سورس کد)
https://github.com/kgrzybek/modular-monolith-with-ddd

⭐️این ریپازیتوری واقعا لایق Star هست پس دریغ نکنین
________________
@DotNetZoom
❇️ تفاوت Event و Delegate و مشکل نشتی حافظه (Memory Leaks) در کار با Event ها

در این پست ابتدا به تفاوت های event و delegate می پردازیم و سپس علت مشکل نشتی حافظه رو به هنگام استفاده از اون ها بررسی میکنیم (سوالی که ممکنه بعضا توی مصاحبه باهاش برخورد کرده باشین)

🔸در ابتدا باید بگم که این دو خیلی شبیه به هم هستند
1- هر دو میتونن باعث memory leak بشن
2- هر دو این امکان رو دارن که با =+ و =- بشه چندتا متد رو بهشون اضافه یا کم کرد
3- هر دو موقع raise شدن (اجرا شدن)، تمام متد های ثبت شده داخل خودشون رو فراخوانی میکنن

🔹و اما تفاوت های اونها چیه؟
در واقع event یک abstraction بر روی delegate هست که یک سری محدودیت ها (بهتره بگیم محافظت ها) رو روش اعمال میکنه
1- اجازه نمیده event رو ریست کنین (یعنی فقط اجازه میده با += و -= متدی بهش اضافه یا کم کنین ولی اجازه نمیده که با = مقدارش رو ریست کنین)
2- اون event رو فقط از طریق داخل کلاس شامل شوندش قابل فراخوانی میکنه یعنی از بیرون کسی نمیتونه اون event رو فراخوانی کنه

🔸بررسی مشکل نشتی حافظه در Event و Delegate
احتمالا خیلی جا ها دیدید یا شنیدید که میگن event ها میتونن باعث نشتی حافظه بشن. اما این مورد محدود به event نیست؛ برای delegate ها هم میتونه اتفاق بیافته. حتی برای یک شی استاتیک هم میتونه اتفاق بیافته. در واقع علت اصلی این مشکل مربوط به باقی ماندن رفرنس اشیای «بلا استفاده» هست

فرض کنین یه کلاس static داریم که داخلش یه لیست static هست. طبیعتا طول عمر این لیست به دلیل static بودن تا پایان عمر application باقی خواهد ماند، در نتیجه GC (مخفف Garbage Collector)، اون لیست رو Dispose نمیکنه
حالا اگر در طول برنامه اشیایی رو درون اون لیست Add کنیم عملا چون رفرنس اون اشیا داخل لیست باقی میمونن، اون اشیا هم تا پایان عمر برنامه Dispose نمیشن (حتی اگه دیگه با اون اشیا کاری نداشته باشیم) و همین عامل هست که باعث Memory Leak میشه

حالا مشابه همین اتفاق میتونه برای event ها و delegate ها هم بیافته
در واقع وقتی متدی از یک شی رو به یک event یا delegate (مانند Action و Func) توسط = یا =+ نسبت میدین، رفرنس اون شی هم Capture میشه، در نتیجه تا پایان عمر اون event یا delegate مربوطه، اون اشیاء هم باقی میمونن و Dispose نمیشن

🔹برای رفع این مشکل راه حل های مختلفی هست
1️⃣ استفاده از -= برای حذف کردن رفرنس (unsubscribe کردن) اون متد از event یا delegate مربوطه
2️⃣ استفاده از الگوی Weak Reference Pattern که توسط کلاس WeakEventHandler دات نت پیاده سازی میشه
3️⃣ استفاده از الگوی Event Aggregator Pattern که اون هم به نوعی از Weak Reference استفاده میکنه و داخل کتابخونه Prism زیاد ازش استفاده شده
و روش های دیگه که خارج از توضیح این پست هست

🔰جهت اطلاعات بیشتر و روش های جلوگیری از نشتی حافظه پیشنهاد میکنم مقالات زیر رو مطالعه کنین
✔️5 Techniques to avoid Memory Leaks by Events in C# .NET you should know
✔️Understanding and Avoiding Memory Leaks with Event Handlers and Event Aggregators
✔️Memory Leak in C#
✔️Are you afraid of event handlers because of C# memory leak?
✔️Events: Demystifying Common Memory Leaks
✔️Weak Event Patterns
_________________
@DotNetZoom
Forwarded from کدهک
آشنایی با Project Tye

https://youtu.be/PECLYxbPblQ
❇️ مدیر‌محصول یا مدیر پروژه یا مالک‌ محصول یا اسکرام مستر؟!

یکی از اتفاق‌هایی که در چند سال اخیر در ایران رخ داده است پر کاربرد شدن عناوین شغلی جدیدی است که برای خیلی از افراد ناآشنا و غریب است. ناآشنا و غریب از چه لحاظ؟ از لحاظ اینکه نمی دانند فرق مدیر محصول (product manager) -‌ مدیر پروژه (project manager)، مالک محصول (product owner) و اسکرام مستر (Scrum Master) در چیست. آیا اصولا این عناوین شغلی با هم فرقی دارند و یا اینکه صرفا عناوین جدیدی برای یک کار هستند؟ اگر شما هم این سوالات را دارید باید بدانید که این سوال افراد زیادی است و شما به هیچ وجه تنها نیستید. حتی من می خواهم یک گام هم فراتر بگذارم و بگویم تازه اگر کسی به واسطه‌ی کار خود با افرادی با عناوین شغلی بالا برای مثال مدیر محصول همکار بوده‌ است و به این وسیله با شرح شغلی عنوان مدیر‌ محصول آشنا است، ممکن است وارد شرکت جدیدی شود و ببیند که مدیر محصول شرکت جدید کاری کاملا متفاوت از مدیر محصول شرکت قبل انجام می‌دهد!‌ و دوباره این سوال برایش ایجاد شود که بلاخره مدیر محصول چه کاری انجام می‌دهد؟

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

ادامه ...
💎https://vrgl.ir/94KnA
___________________
@DotNetZoom
Forwarded from Software Philosophy
استفاده از versioning در ASP.NET Core

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

اما زمانی که پروژه‌های کلاینت بیشتر از یکی است و آپدیت کردن همه موارد به صورت همزمان مقدور نیست ناچاریم یکی از راه های زیر را استفاده کنیم:

- بی‌خیال تغییرات شویم، چون عملا اپلیکیشنی که نتوانستیم آپدیت کنیم از کار خواهد افتاد و نمی‌تواند از Api تغییر کرده استفاده کند.
-یک متد جدید بنویسیم و اپ‌هایی که می‌توانند خودشان را آپدیت کنند از متد جدید استفاده کنند و مواردی هم که نتوانسته‌اند خود را آپدیت کنند از متد قبل استفاده کنند.
- گزینه (احتمالا) آخری که وجود دارد versioning است:

شما با versioning می‌توانید معضلی که در بالا به آن اشاره شد را برطرف کنید و Api های خود را استاندارد کنید و این اجازه را به اپ‌هایی که از Api شما استفاده می‌کنند بدهید تا بتوانند از هر ورژنی که می‌خواهند استفاده کنند.

اطلاعات کامل‌تر را می‌توانید در لینک زیر مطالعه نمایید:

https://dotnetthoughts.net/restful-web-api-versioning-with-asp-net-core/


⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.

#حامد_حاجیلو (http://bit.ly/2IVjfYD)

کانال تلگرام:
@SoftwarePhilosophy

________
معرفی ویژگی جدید C# 9.0 : دستورات سطح-بالا یا Top-level Statements

🔸 زمانی که یک Console application جدید با #C شروع می‌کنید، مقدار زیادی کد تکراری (Boilerplate) دریافت می‌کنید. در زیر شما کد یک برنامه جدید با نام ThomasClaudiusHuber.ConsoleApp مشاهده می‌کنید.

using System;

namespace ThomasClaudiusHuber.ConsoleApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}

🔸سی شارپ 9.0 که با 5 NET. منتشر شد، کلیه ی دستورات را به سطوح بالاتری می رساند که اصطلاحا به آن برنامه سطح-بالا می‌گویند. به این معنی است که شما می‌توانید دستورات را مستقیما در سطح بالای یک فایل بنویسید. نیازی به تعریف کلاس و یا متد ایستای Main نیست. کد زیر Hello World را در Console app که با 9 #C نوشته شده است را نشان می‌دهد:

using System;

Console.WriteLine("Hello World!");


🔰 از طریق لینک زیر می‌توانید ترجمه مقاله‌ای از Thomas Claudius Huber که به بررسی این ویژگی و جزییات بیشتر پرداخته مطالعه کنید:
https://vrgl.ir/fTYeZ

#سپهر_اسلامی
____________________
@DotNetZoom
رایگان کردن مقالات سایت Medium با افزونه Medium Unlimited

مقالات خوبی تو سایت مدیوم وجود داره ولی بعضا این رایگان نبودن و قفل شدن مقالاتش رو مخه
هرچند که میشه با یه پنجره Incognito تو کروم (یا InPrivate تو مرورگر Edge) اون رو باز کرد و به رایگان استفاده کرد ولی بازم رو مخه

خلاصه اینکه اگه این قضیه رو مخ شما هم هست، راه حلش خیلی سادس؛ استفاده از فزونه Medium Unlimited
این افزونه به مدت نامحدود، مقالات سایت مدیوم رو واستون رایگان میکنه.

🔹برای مروگر FireFox میتونین توسط این لینک نصبش کنین

🔸ولی برای مروگر های Chrome و Edge جدید (که بر پایه موتور کروم هست) از طریق Web Store کروم قابل نصب نیست و باید دستی نصبش کنین.
برای این کار ابتدا:
1-فایل افزونه رو از مخزن گیتهاب پروژه دانلود کنید و فایل zip اش رو تو یه مسیری extract کنین
2- از قسمت منو گزینه Extensions رو انتخاب کنین و سپس توی صفحه ای که میاد، تیک گزینه Developer Mode رو فعال کنین
3- روی دکمه Load Unpacked کلیک کنین و مسیر پوشه افزونه که قبلا extract کردین رو بهش بدین
4- تمام، لذتشو ببرین

🔰ریپازیتوری پروژه:
https://github.com/manojVivek/medium-unlimited
____________________
@DotNetZoom
10 کامپوننت برتر رایگان برای Blazor

✔️
Radzen
✔️ Blazorise
✔️ Ant Design Blazor
✔️ MatBlazor
✔️ BlazorStrap
✔️ PanoramicData.Blazor
✔️ MudBlazor
✔️ Element Blazor
✔️ Skclusive.Material.Component
✔️ Blazored
🔰 منبع:
https://medium.com/@alexandre.malavasi/top-10-nice-free-blazor-components-b42875e56b28
___________________
@DotNetZoom
تامین امنیت دیتا های حساس و مهم در EF Core

در این پست به معرفی 2 راهکار (یک کتابخانه و دیگری یک مقاله) جهت تامین امنیت اطلاعات حساس و مهم در EF Core می‌پردازیم

🔸راهکار اول: توسط کتابخانه EntityFrameworkCore.DataEncryption میتونین اطلاعاتتون رو توی دیتابیس رمزنگاری کنین. این کار به سادگی قرار دادن یک اتریبیوت [Encrypted] بر پروپرتی های entity ها تون انجام میشه. در این روش اطلاعات شما موقع insert/update به صورت خودکار Encrypt شده و به صورت رشته توی دیتابیس ذخیره میشن و موقع واکشی هم به صورت خودکار Decrypt میشن لذا برای اعمال بعضی از دستورات شرطی ممکنه دچار مشکل بشین (به خاطر تفاوت مقدار encrypt شده که البته طبیعی هم هست و راه گریزی نیست)
مثلا برای مقایسه برابری (متد Equals یا دستور ==) مشکلی نداره ولی برای دستور Contains یا ... به مشکل میخورین

🔰ریپازیتوری گیتهاب پروژه + اطلاعات بیشتر
https://github.com/Eastrall/EntityFrameworkCore.DataEncryption

🔹راهکار دوم: فرض کنین شخصی که به دیتابیس دسترسی داره، به صورت دستی و مستقیم (نه از طریق اپلیکیشن ما)، مقداری رو تغییر میده بدون اینکه دسترسی لازم به لحاظ بیزینسی رو داشته باشه.
چطور میتونیم متوجه این قضیه بشیم؟ چطوری از صحت اطلاعات خودمون مطمئن بشیم؟ چطوری میتونیم اصالت اون ها رو تضمین کنیم؟
جواب این سوال رو میتونین توی مقاله زیر که توسط وحید نصیری نوشته شده و از روشی خلاقانه استفاده میکنه پیدا کنین

🔰 تشخیص اصالت ردیف‌های یک بانک اطلاعاتی در EF Core
https://www.dotnettips.info/post/3100

نکته: هر دو راهکار بالا database-agnostic هستند یعنی فرقی نمیکنه شما از کدوم دیتابیس پشت EF Core استفاده میکنین؛ با هر دیتابیسی کار میکنه
_______________
@DotNetZoom
داشبورد مدیریت تسک ها برای Quartz .NET

کتابخانه Hangfire (مشابه Quartz) که قدرتمند ترین ابزار برای تسک های زمان بندی شده هست دارای داشبوردی برای مدیریت و نظارت بر تسک ها هست ولی کتابخانه Quartz .NET فاقد چنین داشبوردی هست

🔰اگر از Quartz برای تسک های زمان بندی شده خودتون استفاده میکنین میتونین از 2 کتابخونه کمکی زیر برای بهره مندی از یک داشبورد مدیریتی نظارتی استفاده کنین

🔸کتابخانه Quartzmin
https://github.com/jlucansky/Quartzmin

🔹کتابخانه CrystalQuartz
https://github.com/guryanovev/CrystalQuartz
___________________
@DotNetZoom