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
✅ وب اسمبلی (WebAssembly) چیه؟ و چرا آینده Web هست؟!
وب اسمبلی (یا WASM مخفف WebAssembly) یک زبان low-level (سطح پایین) با فرمت Binary (دو-دویی) هست که توسط مرورگر اجرا میشه
🔸در اینجا چندتا نکته مهم وجود داره:
1️⃣ اول اینکه یه زبان سطح-پایین هست و با پرفرمنسی نزدیک به Native اجرا میشه (اصلا یکی از اهداف اصلی ایجاد WASM اجرا سریع تر کدها توی مروگر بود)
2️⃣ برخلاف js به جای اینکه فرمت متنی داشته باشه، فرمت باینری (دو-دویی) داره که باعث میشه کد حجم کمتری داشته باشه در نتیجه این به معنی بارگزاری سریع تر نیز هست
در واقع وقتی کدی قراره human-readable باشه حجم بیشتری میگیره تا اینکه باینری باشه. مشابه این اتفاق برای سریالایز کردن به json در مقایسه با binary formatter هایی مانند protobuf و message-pack هم اتفاق میافته. ضمن اینکه کدی که به صورت باینری باشه امکان فشرده سازی بیشتر و بهینه تری داره
3️⃣ علاوه بر حالت باینری، یه حالت متنی (به صورت S-expression) هم داره که human-readable هست و قابلیت دیباگ و خوانایی خوبی داره
این فرمت در قالب فایل های با پسوند wat. یا wast. ذخیره میشه که میتونین نمونه کدش رو اینجا ببینین (البته در گذشته این دو معادل هم بودند ولی جدیدا بیشتر wat. برای اینکار استفاده میشه)
4️⃣ گرچه در ابتدا WASM برای اجرا توی مروگر طراحی شده بود ولی بعد ها توی پلتفرم های دیگه هم مورد استقبال قرار گرفت و یه سری Runtime هایی (مانند wasmer و wasmtime) براش نوشته شد که این امکان رو میده که برنامه های WASM رو توی Desktop و IoT و Server و... اجرا بشن
5️⃣ این زبان در کنار خودش یه سری کامپایلر (از جمله emnoscripten و binaryen) ارائه داده تا زبان های low-level ایی همچون C و ++C و Rust بتونن کدشون رو به WASM کامپایل کنن
زبان های دیگه هم از جمله #C و Java و Python و Go به این سمت حرکت کردن و امکان اجرای کد هاشون رو توی مرورگر فراهم کردند
به عنوان مثال Blazor امکان اجرا کد های #C رو در مرورگر فراهم میکنه
مزیت این روش اینه که شما به زبون های دلخواه خودتون میتونین کدی بنویسین که توی مرورگر اجرا بشه. یعنی اصلا نیاز نیس زبان WASM رو بلد باشین.
🔹حالا سوال مهم اینه که این زبان جای JavaScript رو میگیره؟
جواب: نه، اصلا نمیتونه. WASM اومده که مکمل JS باشه و ضعف های اون رو برطرف کنه
زبان JS تو پلتفرم های زیادی استفاده میشه و جامعه بسیار بزرگی داره پس نه WASM نه هیچ زبان دیگه ای نمی تونه اون رو کنار بزنه (حداقل به این زودی ها نه)
در واقع تنها مزیت منحصر به فرد JS سمت Front این بود که تنها پادشاه سمت مرورگر بود. ولی الان که امکان اجرای زبان های دیگه سمت مرورگر فراهم شده عملا راه برای ظهور پادشاه های دیگری هم فراهم شده
یکی از کارهای دیگری که در این زمینه انجام شده AssemblyScript هست که در واقع یک کامپایلر TypeScript به WASM هست که سینتکس کدش کاملا TS نیست ولی شبیه اونه و نهایتا کد های شما رو به WASM کامپایل میکنه
🔸در آخر نکته مهم اینه که که بدونین این تکنولوژی محکوم به اینه که آینده وب باشه!
یعنی حتی اگه این زبان از خودش هیچ آورده ای هم نداشته باشه بازم مسیر توسعه وب در آینده به سمت اون هدایت میشه (توسط دست های پشت پرده :دی) .
چرا؟ چون توسط بنیاد W3C (کنسرسیوم جهانی وب) به عنوان یه استاندارد شناخته شده و نیز شرکتای غولی همچون Google و Microsoft و Mozilla و Apple و Intel و Red Hat و... روش سرمایه گذاری کردن
میگن اگه میخوای پیش گوی خوبی باشی، آینده رو پیش بینی نکن، اون رو بساز. و این ها در واقع کسانی هستند که مسیر توسعه وب رو پیش بینی نمیکنند بلکه اون رو خودشون میسازند
🔰اگه میخواین بیشتر در مورد WebAssembly بدونین این مقاله خوبیه
_______________
@DotNetZoom
وب اسمبلی (یا WASM مخفف WebAssembly) یک زبان low-level (سطح پایین) با فرمت Binary (دو-دویی) هست که توسط مرورگر اجرا میشه
🔸در اینجا چندتا نکته مهم وجود داره:
1️⃣ اول اینکه یه زبان سطح-پایین هست و با پرفرمنسی نزدیک به Native اجرا میشه (اصلا یکی از اهداف اصلی ایجاد WASM اجرا سریع تر کدها توی مروگر بود)
2️⃣ برخلاف js به جای اینکه فرمت متنی داشته باشه، فرمت باینری (دو-دویی) داره که باعث میشه کد حجم کمتری داشته باشه در نتیجه این به معنی بارگزاری سریع تر نیز هست
در واقع وقتی کدی قراره human-readable باشه حجم بیشتری میگیره تا اینکه باینری باشه. مشابه این اتفاق برای سریالایز کردن به json در مقایسه با binary formatter هایی مانند protobuf و message-pack هم اتفاق میافته. ضمن اینکه کدی که به صورت باینری باشه امکان فشرده سازی بیشتر و بهینه تری داره
3️⃣ علاوه بر حالت باینری، یه حالت متنی (به صورت S-expression) هم داره که human-readable هست و قابلیت دیباگ و خوانایی خوبی داره
این فرمت در قالب فایل های با پسوند wat. یا wast. ذخیره میشه که میتونین نمونه کدش رو اینجا ببینین (البته در گذشته این دو معادل هم بودند ولی جدیدا بیشتر wat. برای اینکار استفاده میشه)
4️⃣ گرچه در ابتدا WASM برای اجرا توی مروگر طراحی شده بود ولی بعد ها توی پلتفرم های دیگه هم مورد استقبال قرار گرفت و یه سری Runtime هایی (مانند wasmer و wasmtime) براش نوشته شد که این امکان رو میده که برنامه های WASM رو توی Desktop و IoT و Server و... اجرا بشن
5️⃣ این زبان در کنار خودش یه سری کامپایلر (از جمله emnoscripten و binaryen) ارائه داده تا زبان های low-level ایی همچون C و ++C و Rust بتونن کدشون رو به WASM کامپایل کنن
زبان های دیگه هم از جمله #C و Java و Python و Go به این سمت حرکت کردن و امکان اجرای کد هاشون رو توی مرورگر فراهم کردند
به عنوان مثال Blazor امکان اجرا کد های #C رو در مرورگر فراهم میکنه
مزیت این روش اینه که شما به زبون های دلخواه خودتون میتونین کدی بنویسین که توی مرورگر اجرا بشه. یعنی اصلا نیاز نیس زبان WASM رو بلد باشین.
🔹حالا سوال مهم اینه که این زبان جای JavaScript رو میگیره؟
جواب: نه، اصلا نمیتونه. WASM اومده که مکمل JS باشه و ضعف های اون رو برطرف کنه
زبان JS تو پلتفرم های زیادی استفاده میشه و جامعه بسیار بزرگی داره پس نه WASM نه هیچ زبان دیگه ای نمی تونه اون رو کنار بزنه (حداقل به این زودی ها نه)
در واقع تنها مزیت منحصر به فرد JS سمت Front این بود که تنها پادشاه سمت مرورگر بود. ولی الان که امکان اجرای زبان های دیگه سمت مرورگر فراهم شده عملا راه برای ظهور پادشاه های دیگری هم فراهم شده
یکی از کارهای دیگری که در این زمینه انجام شده AssemblyScript هست که در واقع یک کامپایلر TypeScript به WASM هست که سینتکس کدش کاملا TS نیست ولی شبیه اونه و نهایتا کد های شما رو به WASM کامپایل میکنه
🔸در آخر نکته مهم اینه که که بدونین این تکنولوژی محکوم به اینه که آینده وب باشه!
یعنی حتی اگه این زبان از خودش هیچ آورده ای هم نداشته باشه بازم مسیر توسعه وب در آینده به سمت اون هدایت میشه (توسط دست های پشت پرده :دی) .
چرا؟ چون توسط بنیاد W3C (کنسرسیوم جهانی وب) به عنوان یه استاندارد شناخته شده و نیز شرکتای غولی همچون Google و Microsoft و Mozilla و Apple و Intel و Red Hat و... روش سرمایه گذاری کردن
میگن اگه میخوای پیش گوی خوبی باشی، آینده رو پیش بینی نکن، اون رو بساز. و این ها در واقع کسانی هستند که مسیر توسعه وب رو پیش بینی نمیکنند بلکه اون رو خودشون میسازند
🔰اگه میخواین بیشتر در مورد WebAssembly بدونین این مقاله خوبیه
_______________
@DotNetZoom
❇️ یه وایت بورد آنلاین خیلی خوب واسه کار های تیمی
🔸خیلی وقتا موقع کار تیمی لازم میشه با هم تیمی تون تعامل داشته باشین، روی وایت برد برای هم توضیح بدین، شکل رسم کنین و یا استیکی نوت بچسبونین
حالا که خیلی از برنامه نویسا به صورت ریموت کار میکنن وجود یه وایت بورد آنلاین خیلی میتونه کاربردی باشه
🔹سایت miro یه وایت برد آنلاین خیلی باحال و کاربردی هست که توش میتونین فلوچارت رسم کنین، با ماژیک شکل رسم کنین، Stiky Note بچسبونین و افراد مختلفی به اون متصل بشن و به صورت Real-time با هم دیگه تعامل کنن (البته پولیه ولی نسخه رایگانش تا محدودیت 3 تا بورد رو به شما میده)
🔰چند نمونه از کاربرد هاش برای تیم ها میتونه اینها باشه:
✔️ ترسیم فلوچارت و فرایند های بین فرم ها
✔️ ترسیم نیازمندی های پروژه
✔️ برنامه ریزی های گروهی
✔️ طوفان فکری و ایده پردازی جمعی
✔️ برگزاری رویداد های Event Storming جهت فهم بهتر دامنه
✔️ و...
https://miro.com/
__________________
@DotNetZoom
🔸خیلی وقتا موقع کار تیمی لازم میشه با هم تیمی تون تعامل داشته باشین، روی وایت برد برای هم توضیح بدین، شکل رسم کنین و یا استیکی نوت بچسبونین
حالا که خیلی از برنامه نویسا به صورت ریموت کار میکنن وجود یه وایت بورد آنلاین خیلی میتونه کاربردی باشه
🔹سایت miro یه وایت برد آنلاین خیلی باحال و کاربردی هست که توش میتونین فلوچارت رسم کنین، با ماژیک شکل رسم کنین، Stiky Note بچسبونین و افراد مختلفی به اون متصل بشن و به صورت Real-time با هم دیگه تعامل کنن (البته پولیه ولی نسخه رایگانش تا محدودیت 3 تا بورد رو به شما میده)
🔰چند نمونه از کاربرد هاش برای تیم ها میتونه اینها باشه:
✔️ ترسیم فلوچارت و فرایند های بین فرم ها
✔️ ترسیم نیازمندی های پروژه
✔️ برنامه ریزی های گروهی
✔️ طوفان فکری و ایده پردازی جمعی
✔️ برگزاری رویداد های Event Storming جهت فهم بهتر دامنه
✔️ و...
https://miro.com/
__________________
@DotNetZoom
❇️ یک پروژه FullStack سورس باز SPA با Angular 11 و Asp.Net Core 5.0
💎 تکنولوژی ها و امکانات :
✔️ASP.NET Core 3.1
✔️Entity Framework Core 3.1
✔️Sql Server and Sqlite supporte
✔️Identity Server 4
✔️Angular 8
✔️Secure - CSP Headers
✔️SignalR
✔️SASS
✔️Angular Best practices
✔️Clean Architecture
✔️PWA support
✔️SSR (Server side rendering)
✔️Fast Unit Testing with Jest.
✔️E2E testing with Protractor.
✔️Compodoc for Angular documentation
✔️Swagger as Api explorer
🔰مخزن گیتهاب
https://github.com/asadsahi/AspNetCoreSpa
_________________
@DotNetZoom
💎 تکنولوژی ها و امکانات :
✔️ASP.NET Core 3.1
✔️Entity Framework Core 3.1
✔️Sql Server and Sqlite supporte
✔️Identity Server 4
✔️Angular 8
✔️Secure - CSP Headers
✔️SignalR
✔️SASS
✔️Angular Best practices
✔️Clean Architecture
✔️PWA support
✔️SSR (Server side rendering)
✔️Fast Unit Testing with Jest.
✔️E2E testing with Protractor.
✔️Compodoc for Angular documentation
✔️Swagger as Api explorer
🔰مخزن گیتهاب
https://github.com/asadsahi/AspNetCoreSpa
_________________
@DotNetZoom
GitHub
GitHub - fullstackproltd/AspNetCoreSpa: Asp.Net 7.0 & Angular 15 SPA Fullstack application with plenty of examples. Live demo:
Asp.Net 7.0 & Angular 15 SPA Fullstack application with plenty of examples. Live demo: - GitHub - fullstackproltd/AspNetCoreSpa: Asp.Net 7.0 & Angular 15 SPA Fullstack application ...
❇️ ترجمه گروهی کتاب کدتمیز Clean Code
https://github.com/Noah1001000/clean-code-persian
____________________
@DotNetZoom
https://github.com/Noah1001000/clean-code-persian
____________________
@DotNetZoom
Forwarded from کدهک
آشنایی با Mini-Profiler
با استفاده از miniprofiler می توانید مدت زمانی که برای اجرای هر عملیات طول میکشد بدست آورید و پرفورمنس بخش های مختلف وبسایت خود را بررسی کنید .
https://youtu.be/83Vqz1lb3V4
با استفاده از miniprofiler می توانید مدت زمانی که برای اجرای هر عملیات طول میکشد بدست آورید و پرفورمنس بخش های مختلف وبسایت خود را بررسی کنید .
https://youtu.be/83Vqz1lb3V4
✅ سایت ساز Ghost : یک CMS ساده و سبک Nodejs ایی مناسب برای وبلاگ شخصی
اگه قصد راه اندازی یه بلاگ شخصی ساده و راحت دارین، سایت ساز Ghost شاید بهترین گزینه برای شما باشه
✔️ کلی تم زیبا و متنوع داره
✔️ کلی افزونه کاربردی داره
✔️ خیلی خوش دست و راحته
✔️ بسیار سبکه و میتونه از دیتابیس SQLite استفاده کنه
✔️ قابل سفارشی سازی هست و رایگانه
🔸مشاهده Demo و Showcase ها
🔹مشاهده مستندات و آموزش ها
🔰ریپازیتوری گیتهاب پروژ + طریقه استفاده
https://github.com/TryGhost/Ghost
___________________
@DotNetZoom
اگه قصد راه اندازی یه بلاگ شخصی ساده و راحت دارین، سایت ساز Ghost شاید بهترین گزینه برای شما باشه
✔️ کلی تم زیبا و متنوع داره
✔️ کلی افزونه کاربردی داره
✔️ خیلی خوش دست و راحته
✔️ بسیار سبکه و میتونه از دیتابیس SQLite استفاده کنه
✔️ قابل سفارشی سازی هست و رایگانه
🔸مشاهده Demo و Showcase ها
🔹مشاهده مستندات و آموزش ها
🔰ریپازیتوری گیتهاب پروژ + طریقه استفاده
https://github.com/TryGhost/Ghost
___________________
@DotNetZoom
✅ بررسی عملی CQRS - بخش اول: مقدمه ای بر CQRS
حتما راجب CQRS شنیده اید. در لغت CQRS مخفف Command and Qhery Responsibility Segregation می باشد که در اون سعی میکنیم مدل های خواندن و نوشتن و همچنین مسیر خواندن و نوشتن داده را از یکدیگر جدا کنیم. CQRS مزایای زیادی رو به همراه داره از جمله اینکه با جدا شدن مدل Read و Write میتونیم جداگانه روی هر کدوم optimization انجام بدیم و پرفرمنس مربوط به هر بخش رو جداگانه بهبود بدیم.
در این مقاله چند قسمتی به بررسی عملی CQRS می پردازیم و به تکنیک های ویژه پیاده سازی اون به وسیله الگوی Mediator و کتابخانه MediatR میپردازیم، و سعی میکنیم با جداسازی مدل های Read و Write و همچین دیتابیس های مربوط به هر بخش، یک سولوشن تمیز رو ارائه بدیم
#بابک_طارمی
🔰لینک مقاله:
https://vrgl.ir/01pUA
____________________
@DotNetZoom
حتما راجب CQRS شنیده اید. در لغت CQRS مخفف Command and Qhery Responsibility Segregation می باشد که در اون سعی میکنیم مدل های خواندن و نوشتن و همچنین مسیر خواندن و نوشتن داده را از یکدیگر جدا کنیم. CQRS مزایای زیادی رو به همراه داره از جمله اینکه با جدا شدن مدل Read و Write میتونیم جداگانه روی هر کدوم optimization انجام بدیم و پرفرمنس مربوط به هر بخش رو جداگانه بهبود بدیم.
در این مقاله چند قسمتی به بررسی عملی CQRS می پردازیم و به تکنیک های ویژه پیاده سازی اون به وسیله الگوی Mediator و کتابخانه MediatR میپردازیم، و سعی میکنیم با جداسازی مدل های Read و Write و همچین دیتابیس های مربوط به هر بخش، یک سولوشن تمیز رو ارائه بدیم
#بابک_طارمی
🔰لینک مقاله:
https://vrgl.ir/01pUA
____________________
@DotNetZoom
ویرگول
بررسی عملی CQRS- بخش اول: مقدمه ای بر CQRS
در این مقاله چند قسمتی، قرار است به صورت عمیق به بررسی CQRS بپردازیم و تکنیک های لازم برای پیاده سازی یک پروژه به صورت CQRS را بررسی کنیم