✅ معرفی محبوب ترین کتابخانه های "رایگان" کار با 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
یکی از محبوب ترین کتابخونه کار با اکسل در دات نت، کتابخونه 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
قبلا کتابخانه EFSecondLevelCache.Core رو معرفی کرده بودیم
توسط این کتابخانه میتونین کش سطح دوم (second level caching) رو روی EF Core فعال کنین. در واقع میتونین نتیجه کوئری هاتون رو کش کنین تا دفعه بعد، به جای دیتابیس، از کش خونده بشه.
این کتابخانه توسط وحید نصیری عزیز، مدیر سایت dotnettips.info نوشته شده است.
اکنون میخوایم کتابخانه جایگزین اون یعنی EFCoreSecondLevelCacheInterceptor رو معرفی کنیم
این کتابخونه هم مشابه قبلی هست و توسط وحید نصیری نوشته
🔰مزیت این کتابخونه نسبت به قبلی اینه که :
🔹کار باهاش ساده تره
🔸به دلیل استفاده از Interceptor پرفرمنس بالاتری داره
🔹یه سری از باگ ها و محدودیت هایی که قبلی داشت رو دیگه نداره
🔸و وابستگی به کتابخونه شخص ثالث برای Caching نداره و از Abstract های خود دات نت استفاده میکنه
🔰 نکته :
✔️اکیدا پیشنهاد میکنم اگه از قبلی استفاده میکردین، به پکیج جدید مهاجرت کنین (ضمن اینکه کتابخانه قلبی Archive شده و دیگر توسعه داده نمشه)
✔️کشینگ همیشه ازش به عنوان یه شمشیر "دو لبه" یاد میشه که اگه با علم کافی و به جا ازش استفاده نکنین و حواستون به Invalidate کردن ایتم های کش شده نباشه، سیستم رو دچاره مشکل میکنه
خوبی این کتابخونه اینه که بحث Invalidate کردن رو به صورت خودکار انجام میده و دیگه نگرانیی بابت اون نخواهید داشت، پس افرادی که توی این مبحث واقعا بزرگ (Caching) حرفه ای هم نیستن راحت تر میتونن تو پروژه هاشون ازش استفاده کنن
https://github.com/VahidN/EFCoreSecondLevelCacheInterceptor
___________________
@DotNetZoom
GitHub
GitHub - VahidN/EFCoreSecondLevelCacheInterceptor: EF Core Second Level Cache Interceptor
EF Core Second Level Cache Interceptor. Contribute to VahidN/EFCoreSecondLevelCacheInterceptor development by creating an account on GitHub.
✅ آموزش معماری تمیز (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
اکثر مقالاتی که این معماری رو به صورت کلی و انتزاعی توضیح دادند ممکنه برنامه نویس رو به خوبی شیرفهم نکنه مخصوصا وقتی با مفاهیمی آشنا میشن که شاید تا قبل نمیشناختین یا معادلی براش توی ذهنتون ندارین مثل 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
یکی از دوستان سراغ کتابخونه 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 کدهک
❇️ طراحی یک برنامهی 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
🔸ریپازیتوری زیر یکی از برترین آموزش های توسعه نرم افزار های دات نت مبتنی بر 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
GitHub
GitHub - kgrzybek/modular-monolith-with-ddd: Full Modular Monolith application with Domain-Driven Design approach.
Full Modular Monolith application with Domain-Driven Design approach. - kgrzybek/modular-monolith-with-ddd
❇️ تفاوت 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
در این پست ابتدا به تفاوت های 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
Michael's Coding Spot
5 Techniques to avoid Memory Leaks by Events in C# .NET you should know
Event registrations in C# (and .NET in general) are the most common cause of memory leaks. At least from my experience. In fact, I saw so much memory leaks from events that seeing += in code immediately makes me suspicious.
Forwarded from کدهک
❇️ مدیرمحصول یا مدیر پروژه یا مالک محصول یا اسکرام مستر؟!
یکی از اتفاقهایی که در چند سال اخیر در ایران رخ داده است پر کاربرد شدن عناوین شغلی جدیدی است که برای خیلی از افراد ناآشنا و غریب است. ناآشنا و غریب از چه لحاظ؟ از لحاظ اینکه نمی دانند فرق مدیر محصول (product manager) - مدیر پروژه (project manager)، مالک محصول (product owner) و اسکرام مستر (Scrum Master) در چیست. آیا اصولا این عناوین شغلی با هم فرقی دارند و یا اینکه صرفا عناوین جدیدی برای یک کار هستند؟ اگر شما هم این سوالات را دارید باید بدانید که این سوال افراد زیادی است و شما به هیچ وجه تنها نیستید. حتی من می خواهم یک گام هم فراتر بگذارم و بگویم تازه اگر کسی به واسطهی کار خود با افرادی با عناوین شغلی بالا برای مثال مدیر محصول همکار بوده است و به این وسیله با شرح شغلی عنوان مدیر محصول آشنا است، ممکن است وارد شرکت جدیدی شود و ببیند که مدیر محصول شرکت جدید کاری کاملا متفاوت از مدیر محصول شرکت قبل انجام میدهد! و دوباره این سوال برایش ایجاد شود که بلاخره مدیر محصول چه کاری انجام میدهد؟
اگر بخواهم اعتراف کنم باید بگویم خود من هم تا مدتها درگیر دستهبندی این عناوین شغلی در ذهنم بودم و همین شد که گفتم بهترین کار مکتوب کردن پاسخ این سوالات است، شاید برای افراد دیگری مفید واقع شود. قبل از خواندن این متن در یاد داشته باشیم که اختلاف عقاید زیادی در رابطه با تعاریف این عناوین شغلی وجود دارد و نوشتهی زیر ترکیبی از تعاریف راهنمای اسکرام و اجایل، بخش آموزشی لینکدین، منابع دیگر و تجربیات خودم میباشد.
ادامه ...
💎https://vrgl.ir/94KnA
___________________
@DotNetZoom
یکی از اتفاقهایی که در چند سال اخیر در ایران رخ داده است پر کاربرد شدن عناوین شغلی جدیدی است که برای خیلی از افراد ناآشنا و غریب است. ناآشنا و غریب از چه لحاظ؟ از لحاظ اینکه نمی دانند فرق مدیر محصول (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
________
در پروژههای کوچک که معمولا فقط یک برنامه (کلاینت) از Api ما استفاده میکند، در صورتی که بخواهیم تغییری در ورودی و خروجیها یا آدرس Api بدهیم به راحتی میتوانیم نسخه کلاینت (اپلیکیشن اندرویدی, سایت و ... ) را هم به روزرسانی کنیم.
اما زمانی که پروژههای کلاینت بیشتر از یکی است و آپدیت کردن همه موارد به صورت همزمان مقدور نیست ناچاریم یکی از راه های زیر را استفاده کنیم:
- بیخیال تغییرات شویم، چون عملا اپلیکیشنی که نتوانستیم آپدیت کنیم از کار خواهد افتاد و نمیتواند از Api تغییر کرده استفاده کند.
-یک متد جدید بنویسیم و اپهایی که میتوانند خودشان را آپدیت کنند از متد جدید استفاده کنند و مواردی هم که نتوانستهاند خود را آپدیت کنند از متد قبل استفاده کنند.
- گزینه (احتمالا) آخری که وجود دارد versioning است:
شما با versioning میتوانید معضلی که در بالا به آن اشاره شد را برطرف کنید و Api های خود را استاندارد کنید و این اجازه را به اپهایی که از Api شما استفاده میکنند بدهید تا بتوانند از هر ورژنی که میخواهند استفاده کنند.
اطلاعات کاملتر را میتوانید در لینک زیر مطالعه نمایید:
https://dotnetthoughts.net/restful-web-api-versioning-with-asp-net-core/
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (http://bit.ly/2IVjfYD)
کانال تلگرام:
@SoftwarePhilosophy
________
dotnetthoughts
RESTful API versioning with ASP.NET Core
This blog post will discuss about the commonly used API Versioning strategies and how to implement them in ASP.NET Core Web API.
✅ معرفی ویژگی جدید C# 9.0 : دستورات سطح-بالا یا Top-level Statements
🔸 زمانی که یک Console application جدید با #C شروع میکنید، مقدار زیادی کد تکراری (Boilerplate) دریافت میکنید. در زیر شما کد یک برنامه جدید با نام ThomasClaudiusHuber.ConsoleApp مشاهده میکنید.
https://vrgl.ir/fTYeZ
#سپهر_اسلامی
____________________
@DotNetZoom
🔸 زمانی که یک Console application جدید با #C شروع میکنید، مقدار زیادی کد تکراری (Boilerplate) دریافت میکنید. در زیر شما کد یک برنامه جدید با نام ThomasClaudiusHuber.ConsoleApp مشاهده میکنید.
using System;🔸سی شارپ 9.0 که با 5 NET. منتشر شد، کلیه ی دستورات را به سطوح بالاتری می رساند که اصطلاحا به آن برنامه سطح-بالا میگویند. به این معنی است که شما میتوانید دستورات را مستقیما در سطح بالای یک فایل بنویسید. نیازی به تعریف کلاس و یا متد ایستای Main نیست. کد زیر Hello World را در Console app که با 9 #C نوشته شده است را نشان میدهد:
namespace ThomasClaudiusHuber.ConsoleApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
using System;
Console.WriteLine("Hello World!");
🔰 از طریق لینک زیر میتوانید ترجمه مقالهای از Thomas Claudius Huber که به بررسی این ویژگی و جزییات بیشتر پرداخته مطالعه کنید:https://vrgl.ir/fTYeZ
#سپهر_اسلامی
____________________
@DotNetZoom
ویرگول
C# 9.0: دستورات سطح-بالا. یا باید بگم: سلام، متد Main کجاست؟
از ویژگیهای جدید سی شارپ ، دستورات سطح بالا را معرفی و بررسی میکنیم
✅ رایگان کردن مقالات سایت 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
مقالات خوبی تو سایت مدیوم وجود داره ولی بعضا این رایگان نبودن و قفل شدن مقالاتش رو مخه
هرچند که میشه با یه پنجره 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
addons.mozilla.org
Medium Unlimited: Read for free – Get this Extension for 🦊 Firefox (en-US)
Download Medium Unlimited: Read for free for Firefox. Unlocks medium.com for unlimited reads, no membership required
✅ 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
✔️ 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 میتونین اطلاعاتتون رو توی دیتابیس رمزنگاری کنین. این کار به سادگی قرار دادن یک اتریبیوت
مثلا برای مقایسه برابری (متد Equals یا دستور ==) مشکلی نداره ولی برای دستور Contains یا ... به مشکل میخورین
🔰ریپازیتوری گیتهاب پروژه + اطلاعات بیشتر
https://github.com/Eastrall/EntityFrameworkCore.DataEncryption
🔹راهکار دوم: فرض کنین شخصی که به دیتابیس دسترسی داره، به صورت دستی و مستقیم (نه از طریق اپلیکیشن ما)، مقداری رو تغییر میده بدون اینکه دسترسی لازم به لحاظ بیزینسی رو داشته باشه.
چطور میتونیم متوجه این قضیه بشیم؟ چطوری از صحت اطلاعات خودمون مطمئن بشیم؟ چطوری میتونیم اصالت اون ها رو تضمین کنیم؟
جواب این سوال رو میتونین توی مقاله زیر که توسط وحید نصیری نوشته شده و از روشی خلاقانه استفاده میکنه پیدا کنین
🔰 تشخیص اصالت ردیفهای یک بانک اطلاعاتی در EF Core
https://www.dotnettips.info/post/3100
نکته: هر دو راهکار بالا database-agnostic هستند یعنی فرقی نمیکنه شما از کدوم دیتابیس پشت EF Core استفاده میکنین؛ با هر دیتابیسی کار میکنه
_______________
@DotNetZoom
در این پست به معرفی 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
Telegram
Attach Files
✅ داشبورد مدیریت تسک ها برای Quartz .NET
کتابخانه Hangfire (مشابه Quartz) که قدرتمند ترین ابزار برای تسک های زمان بندی شده هست دارای داشبوردی برای مدیریت و نظارت بر تسک ها هست ولی کتابخانه Quartz .NET فاقد چنین داشبوردی هست
🔰اگر از Quartz برای تسک های زمان بندی شده خودتون استفاده میکنین میتونین از 2 کتابخونه کمکی زیر برای بهره مندی از یک داشبورد مدیریتی نظارتی استفاده کنین
🔸کتابخانه Quartzmin
https://github.com/jlucansky/Quartzmin
🔹کتابخانه CrystalQuartz
https://github.com/guryanovev/CrystalQuartz
___________________
@DotNetZoom
کتابخانه Hangfire (مشابه Quartz) که قدرتمند ترین ابزار برای تسک های زمان بندی شده هست دارای داشبوردی برای مدیریت و نظارت بر تسک ها هست ولی کتابخانه Quartz .NET فاقد چنین داشبوردی هست
🔰اگر از Quartz برای تسک های زمان بندی شده خودتون استفاده میکنین میتونین از 2 کتابخونه کمکی زیر برای بهره مندی از یک داشبورد مدیریتی نظارتی استفاده کنین
🔸کتابخانه Quartzmin
https://github.com/jlucansky/Quartzmin
🔹کتابخانه CrystalQuartz
https://github.com/guryanovev/CrystalQuartz
___________________
@DotNetZoom
✅ لاگ کردن خطاها در ASP .NET Core توسط Exception Filter
در ASP .NET Core قابلیتی داریم به نام Filter که این اجازه رو بهمون میده که در مراحل خاصی از پردازش Request وارده، کد های دلخواهمون رو اجرا کنیم. مثلا میتونیم قبل یا بعد از اجرای اکشن، کدی رو اجرا کنیم
به عنوان مثال، یکی از پرکاربرد ترین اکشن فیلتر ها، همین اتیریبیوت [Authorize] هست که قبل از اجرای اکشن مربوطه، احراز هویت رو چک میکنه و در صورتی که کاربر لاگین نکرداه باشه یا دسترسی نداشته باشه، پردازش رو خاتمه میده
این قابلیت بهمون این امکان رو میدن که یه سری از کار های تکراری (یا بهتره بگم cross-cutting concerns) که در لازمه طی پردازش یک درخواست انجام بشن رو براحتی و بدون تکرار کردن کد ها هندل کنیم.
از جمله کار های جالبی که میشه با فیلتر ها انجام داد:
1️⃣ مثلا میتونیم مقادیر ورودی کاربر رو قبل از اجرای اکشن ها به صورت خودکار اعتبار سنجی (ModelState Validation) کنیم تا لازم نباشه ابتدای هر اکشن متد ModelState.IsValid رو چک کنیم
2️⃣ میتونیم خروجی API ها رو یک دست کنیم تا طبق یک ساختار واحد و استاندارد به کلاینت فرستاده بشن (که این مورد در API نویسی بسیار مرسوم هست)
3️⃣ میتونیم مدت زمان اجرای هر اکشن رو اندازه گیری کنیم و در صورتی که بیش از یه مدت مشخصی (مثلا 15 ثانیه) طول بکشه اون رو لاگ کنیم یا یه هشدار صادر کنیم
در ASP .NET Core، فیلتر های مختلفی وجود داره که هرکدوم کاربرد خودشون رو دارن. یکی از این فیلتر ها ExceptionFilter هست که به هنگام رخ دادن Exception ها اجرا میشه
در این مقاله میخوایم به بررسی کامل ExceptionFilter ها بپردازیم و در نهایت یک ExceptionFilter سفارشی بنویسیم که تمام خطا هایی که توی MVC Pipeline مون رخ میده رو متوجه بشیم و توسط EF Core، اون ها رو توی دیتابیس لاگ کنیم
پس با من همراه باشید
https://vrgl.ir/RwHGM
#آرمین_شعیبی_نژاد
__________________
@DotNetZoom
در ASP .NET Core قابلیتی داریم به نام Filter که این اجازه رو بهمون میده که در مراحل خاصی از پردازش Request وارده، کد های دلخواهمون رو اجرا کنیم. مثلا میتونیم قبل یا بعد از اجرای اکشن، کدی رو اجرا کنیم
به عنوان مثال، یکی از پرکاربرد ترین اکشن فیلتر ها، همین اتیریبیوت [Authorize] هست که قبل از اجرای اکشن مربوطه، احراز هویت رو چک میکنه و در صورتی که کاربر لاگین نکرداه باشه یا دسترسی نداشته باشه، پردازش رو خاتمه میده
این قابلیت بهمون این امکان رو میدن که یه سری از کار های تکراری (یا بهتره بگم cross-cutting concerns) که در لازمه طی پردازش یک درخواست انجام بشن رو براحتی و بدون تکرار کردن کد ها هندل کنیم.
از جمله کار های جالبی که میشه با فیلتر ها انجام داد:
1️⃣ مثلا میتونیم مقادیر ورودی کاربر رو قبل از اجرای اکشن ها به صورت خودکار اعتبار سنجی (ModelState Validation) کنیم تا لازم نباشه ابتدای هر اکشن متد ModelState.IsValid رو چک کنیم
2️⃣ میتونیم خروجی API ها رو یک دست کنیم تا طبق یک ساختار واحد و استاندارد به کلاینت فرستاده بشن (که این مورد در API نویسی بسیار مرسوم هست)
3️⃣ میتونیم مدت زمان اجرای هر اکشن رو اندازه گیری کنیم و در صورتی که بیش از یه مدت مشخصی (مثلا 15 ثانیه) طول بکشه اون رو لاگ کنیم یا یه هشدار صادر کنیم
در ASP .NET Core، فیلتر های مختلفی وجود داره که هرکدوم کاربرد خودشون رو دارن. یکی از این فیلتر ها ExceptionFilter هست که به هنگام رخ دادن Exception ها اجرا میشه
در این مقاله میخوایم به بررسی کامل ExceptionFilter ها بپردازیم و در نهایت یک ExceptionFilter سفارشی بنویسیم که تمام خطا هایی که توی MVC Pipeline مون رخ میده رو متوجه بشیم و توسط EF Core، اون ها رو توی دیتابیس لاگ کنیم
پس با من همراه باشید
https://vrgl.ir/RwHGM
#آرمین_شعیبی_نژاد
__________________
@DotNetZoom
✅ پیادهسازی Logging حرفه ای در ASP .NET Core توسط Serilog و ElasticSearch و Kibana
معمولا در معماری میکروسرویس ها، مانیتور کردن و ثبت لاگ های هر میکرو سرویس یک چالش بزرگ محسوب میشه. اینکه ممکنه هر میکروسرویس لاگ مربوط به خودش رو نتونه ثبت کنه و یا خطای مربوط به یک ریکوئست چند میکروسرویس دخیلش باشن و نشه سورس خطا رو پیدا کرد. و در صورت ثبت لاگ ها، چگونه بتونیم از اون ها گزارش بگیریم و یا در صورت نیاز نمودار و چارت براشون درست کنیم.
نوشتن چنین سیستمی چالش های خاص خودش رو داره و موارد بسیار زیادی هست که باید براشون درنظر گرفت مثل ثبت لاگ ها و index کردن اون ها،فیلتر کردن لاگ ها بر حسب سطح یا زمان، قابلیت جستجو بین رکورد های مختلف و همچنین ردیابی یک لاگ که ممکنه چند میکروسرویس در ایجاد اون دخیل باشن
خوشبختانه برای اینکار ابزار های بسیار خوبی وجود داره که کار ما رو به عنوان برنامه نویس بسیار آسون میکنه
یکی از این ابزارهاElasticSearch هست که کار رو برای پیاده سازی Centerlized Logging بسیار آسون میکنه چون در کنار اون میشه از Kibana هم به عنوان داشبورد استفاده کرد که برای فیلتر کردن لاگ ها و همچنین Formatting مناسب لاگ ها ابزار های خیلی خوبی رو در اختیارمون میذاره.
همچنین Trace کردن لاگ ها با استفاده از یک TraceId کاستوم بسیار ساده تر میشه که خود Asp Net Core Logger این امکانات رو به صورت پیش فرض در اختیارمون قرار میده.
در این مقاله به بررسی و پیاده سازی چنین سیستمی در Asp Net Core میپردازیم. همچنین با نصب و تنظیمات ElasticSearch و Kibana در محیط ويندوز و داکر آشنا میشیم
🔰لینک مقاله:
https://vrgl.ir/pcnWp
#بابک_طارمی
________________
@DotNetZoom
معمولا در معماری میکروسرویس ها، مانیتور کردن و ثبت لاگ های هر میکرو سرویس یک چالش بزرگ محسوب میشه. اینکه ممکنه هر میکروسرویس لاگ مربوط به خودش رو نتونه ثبت کنه و یا خطای مربوط به یک ریکوئست چند میکروسرویس دخیلش باشن و نشه سورس خطا رو پیدا کرد. و در صورت ثبت لاگ ها، چگونه بتونیم از اون ها گزارش بگیریم و یا در صورت نیاز نمودار و چارت براشون درست کنیم.
نوشتن چنین سیستمی چالش های خاص خودش رو داره و موارد بسیار زیادی هست که باید براشون درنظر گرفت مثل ثبت لاگ ها و index کردن اون ها،فیلتر کردن لاگ ها بر حسب سطح یا زمان، قابلیت جستجو بین رکورد های مختلف و همچنین ردیابی یک لاگ که ممکنه چند میکروسرویس در ایجاد اون دخیل باشن
خوشبختانه برای اینکار ابزار های بسیار خوبی وجود داره که کار ما رو به عنوان برنامه نویس بسیار آسون میکنه
یکی از این ابزارهاElasticSearch هست که کار رو برای پیاده سازی Centerlized Logging بسیار آسون میکنه چون در کنار اون میشه از Kibana هم به عنوان داشبورد استفاده کرد که برای فیلتر کردن لاگ ها و همچنین Formatting مناسب لاگ ها ابزار های خیلی خوبی رو در اختیارمون میذاره.
همچنین Trace کردن لاگ ها با استفاده از یک TraceId کاستوم بسیار ساده تر میشه که خود Asp Net Core Logger این امکانات رو به صورت پیش فرض در اختیارمون قرار میده.
در این مقاله به بررسی و پیاده سازی چنین سیستمی در Asp Net Core میپردازیم. همچنین با نصب و تنظیمات ElasticSearch و Kibana در محیط ويندوز و داکر آشنا میشیم
🔰لینک مقاله:
https://vrgl.ir/pcnWp
#بابک_طارمی
________________
@DotNetZoom
Forwarded from کدهک
✅ آپلود فایل های بسیار حجیم در ASP.NET Core
واسه فایل های نه چندان حجیم (مثلا تا 200 الی 300 مگابایت) میتونین از 2 آموزش زیر استفاده کنین که ترفنداشو بهتون میگه
http://www.binaryintellect.net/articles/612cf2d1-5b3d-40eb-a5ff-924005955a62.aspx
https://www.talkingdotnet.com/how-to-increase-file-upload-size-asp-net-core/
🔰 ولی اگه فایل هاتون خیلی حجیم هست (مثلا 500 مگ به بالا تاااااا چندین گیگابایت)
بهتره از روش Chunk (خرد کردن فایل حجیم به تکه های کوچیک تر و سپس آپلود این تیکه ها و نهایتا جمع کردنش سمت سرور) استفاده کنین
🔸سمپل زیر این قابلیت رو به خوبی پیاده سازی کرده
واسه این روش باید هم سمت سرور کدشو بنویسین و هم سمت کلاینت، از پلاگینی استفاده کنین که کار Chunk کردن رو براتون انجام بده (البته دستی هم میشه ولی با پلاگین راحت تره) مثلا این سمپل از پلاگین Resumable.js استفاده کرده
https://github.com/edsoncunha/chunked-file-upload-csharp
نکته : واسه اجرا حتما برنامه رو روی Kestrel اجرا کنین وگرنه در حالت IISExpress محدودیت هایی داره
_______________
@DotNetZoom
واسه فایل های نه چندان حجیم (مثلا تا 200 الی 300 مگابایت) میتونین از 2 آموزش زیر استفاده کنین که ترفنداشو بهتون میگه
http://www.binaryintellect.net/articles/612cf2d1-5b3d-40eb-a5ff-924005955a62.aspx
https://www.talkingdotnet.com/how-to-increase-file-upload-size-asp-net-core/
🔰 ولی اگه فایل هاتون خیلی حجیم هست (مثلا 500 مگ به بالا تاااااا چندین گیگابایت)
بهتره از روش Chunk (خرد کردن فایل حجیم به تکه های کوچیک تر و سپس آپلود این تیکه ها و نهایتا جمع کردنش سمت سرور) استفاده کنین
🔸سمپل زیر این قابلیت رو به خوبی پیاده سازی کرده
واسه این روش باید هم سمت سرور کدشو بنویسین و هم سمت کلاینت، از پلاگینی استفاده کنین که کار Chunk کردن رو براتون انجام بده (البته دستی هم میشه ولی با پلاگین راحت تره) مثلا این سمپل از پلاگین Resumable.js استفاده کرده
https://github.com/edsoncunha/chunked-file-upload-csharp
نکته : واسه اجرا حتما برنامه رو روی Kestrel اجرا کنین وگرنه در حالت IISExpress محدودیت هایی داره
_______________
@DotNetZoom
Telegram
Attach Files
✅ هفته به هفته با برترین مقالات NET.
اگه علاقمند به مطالعه برترین مقالات دات نت و دنبال کردن اخبار روز دنیای دات نت هستین، بهترین راه اینه که تو سایت های خبرنامه هفتگی این حوزه ثبت نام کنین تا هر هفته، محبوب ترین مقالات و اخبار رو تو ایمیل خودتون دریافت کنین
🔰لیست زیر گلچینی از بهترین سایت های خبرنامه های دات نتی هست. کافیه توش ثبت نام کنین یا با برنامه های فید خوان RSS اونا رو دنبال کنین
🔸https://csharpdigest.net/
🔹https://dotnet.libhunt.com/
🔸https://aspnetcore.news/
🔹https://dotnetkicks.com/
🔸https://discoverdot.net/
🔹https://www.dotnetweekly.com/
🔸https://www.alvinashcraft.com/
🔹https://olegkarasik.wordpress.com/
🔸https://dotnettips.info/ (آخرین لینک ها و خبر ها)
___________________
@DotNetZoom
اگه علاقمند به مطالعه برترین مقالات دات نت و دنبال کردن اخبار روز دنیای دات نت هستین، بهترین راه اینه که تو سایت های خبرنامه هفتگی این حوزه ثبت نام کنین تا هر هفته، محبوب ترین مقالات و اخبار رو تو ایمیل خودتون دریافت کنین
🔰لیست زیر گلچینی از بهترین سایت های خبرنامه های دات نتی هست. کافیه توش ثبت نام کنین یا با برنامه های فید خوان RSS اونا رو دنبال کنین
🔸https://csharpdigest.net/
🔹https://dotnet.libhunt.com/
🔸https://aspnetcore.news/
🔹https://dotnetkicks.com/
🔸https://discoverdot.net/
🔹https://www.dotnetweekly.com/
🔸https://www.alvinashcraft.com/
🔹https://olegkarasik.wordpress.com/
🔸https://dotnettips.info/ (آخرین لینک ها و خبر ها)
___________________
@DotNetZoom
Forwarded from سفر کهکشان با ابوراجا :)
بعضی نیازهای روزمره برنامه نویسی در همه زبان ها همیشه مورد نیاز هستند. مهم ترین اینها توابع و کتابخانه های کار با اعداد و زبان و تبدیل های مختلف اونهاست.
حالا آقای علی ترکی عزیز به همراه چندنفر دیگر یک کتابخانه با کیفیت برای js نوشتند که تقریبا همه این نیازهای روزمره را پوشش میدهد.
نمونه مواردی که این کتابخانه پوشش میدهد:
• تبدیل اعداد به حروف و برعکس (مثلا:تبدیل ۳۰۰ به سی صد و برعکس).
• حذف و اضافه کردن کاما به اعداد.
• تبدیل اعداد فارسی به انگلیسی و عربی و عربی به انگلیسی و فارسی.
• تایید و اعتبارسنجی کد ملی.
• دریافت نام استان و شهرستان با کد ملی.
• تایید و اعتبارسنجی شماره عابر بانک.
• دریافت نام بانک توسط شماره عابر بانک.
• تایید و اعتبارسنجی متن فارسی ( به عنوان مثال: درصورتی که متن وارد شده فارسی باشد true برمیگرداند )
• تمیز کردن متن فارسی از حروف عربی و unicode ها.
تمامی مثال ها و اطلاعات تکمیلی رو میتونید توی صفحه گیت هاب پروژه مشاهده کنید.
https://github.com/persian-tools/persian-tools
@abooraja_ir
حالا آقای علی ترکی عزیز به همراه چندنفر دیگر یک کتابخانه با کیفیت برای js نوشتند که تقریبا همه این نیازهای روزمره را پوشش میدهد.
نمونه مواردی که این کتابخانه پوشش میدهد:
• تبدیل اعداد به حروف و برعکس (مثلا:تبدیل ۳۰۰ به سی صد و برعکس).
• حذف و اضافه کردن کاما به اعداد.
• تبدیل اعداد فارسی به انگلیسی و عربی و عربی به انگلیسی و فارسی.
• تایید و اعتبارسنجی کد ملی.
• دریافت نام استان و شهرستان با کد ملی.
• تایید و اعتبارسنجی شماره عابر بانک.
• دریافت نام بانک توسط شماره عابر بانک.
• تایید و اعتبارسنجی متن فارسی ( به عنوان مثال: درصورتی که متن وارد شده فارسی باشد true برمیگرداند )
• تمیز کردن متن فارسی از حروف عربی و unicode ها.
تمامی مثال ها و اطلاعات تکمیلی رو میتونید توی صفحه گیت هاب پروژه مشاهده کنید.
https://github.com/persian-tools/persian-tools
@abooraja_ir