softwarephilosophy | Unsorted

Telegram-канал softwarephilosophy - Software Philosophy

3509

چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار. معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید

Subscribe to a channel

Software Philosophy

استفاده از سرویس مایکروسافت hosted agent یا self hosted agent ؟

سرویس Microsoft Hosted Agent ماشین‌های مجازی هستند که توسط مایکروسافت مدیریت و در Cloud اجرا می‌شوند. این سرویس‌ها مجموعه‌ای از ابزارها و نرم افزارهای از پیش تعریف شده و نصب شده دارند و به طور منظم به روز می‌شوند. شما می‌توانید از image های مختلف مانند ویندوز، لینوکس یا macOS بسته به نیازهای خود انتخاب کنید. همچنین هر بار که یک pipeline را اجرا می‌کنید، برای هر کار یک VM تازه دریافت می‌کنید که VM پس از اتمام کار دور ریخته می‌شود.

یک Self-Hosted Agent ماشین‌های مجازی یا ماشین‌های فیزیکی هستند که شما به تنهایی تنظیم و مدیریت می‌کنید. شما می‌توانید هر نرم افزار یا ابزاری را که برای ساخت و استقرار خود نیاز دارید نصب کنید و کنترل کامل بر سخت افزار، سیستم عامل و پیکربندی داشته باشید. شما همچنین می‌توانید از حافظه‌های پنهان در سطح ماشین و پیکربندی برای سرعت بخشیدن به pipeline خود استفاده کنید.

چه زمانی از Self-Hosted Agent یا Microsoft Hosted استفاده کنیم؟


پیچیدگی: اگر pipeline شما نیاز به نرم افزار پیچیده یا سفارشی یا ابزارهایی دارند که در مایکروسافت Hosted Agent در دسترس نیستند، باید از Self-Hosted استفاده کنید.

عملکرد: اگر pipeline شما به عملکرد یا مسائل مربوط به شبکه حساس هستند، باید از Self-Hosted استفاده کنید.

هزینه: اگر pipeline شما اغلب یا برای مدت طولانی اجرا می‌شوند، باید از Self-Hosted استفاده کنید

امنیت: اگر pipeline شما اطلاعات یا کد حساس یا محرمانه را اداره می‌کنند، باید از Self-Hosted استفاده کنید.

🔗 نسخه کامل مقاله را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

اجرای سبک‌تر یک وب اپلیکیشن ساده!

معمولا زمانی که یک وب اپلیکیشن ASP.NET ای ایجاد می‌کنیم، به صورت پیش فرض از روش‌های زیر برای ساخت اپ استفاده می‌شود:

Host.CreateDefaultBuilder()

WebApplication.CreateBuilder()



این دو روش متدوال‌ترین روش‌ها هستند و تفاوت آن‌ها را می‌توانید اینجا ببینید.

اما این دو روش امکانات خیلی زیادی را به سیستم اضافه می‌کنند که ممکن است حتی تا پایان عمر سیستم هم از بیشتر آن‌ها استفاده نکنید!

اگر اپی ساده دارید بد نیست نگاهی به دو روش زیر هم بیندازید:

WebApplication.CreateSlimBuilder()

و
WebApplication.CreateEmptyBuilder()


حالت CreateEmptyBuilder عملا چیزی ندارد و اگر ران شود همان ابتدا خطا می‌دهد و باید چیزهایی به صورت اولیه به آن اضافه کنید. اما حالت CreateSlimBuilder یک وب اپ ساده برای شما بالا می‌آورد با این تفاوت نسبت به CreateBuilder که یک سری موارد از جمله موارد زیر را ندارد:

- عدم ساپورت startup assemblies
- عدم ساپورت EventSource,Debug provider, EventLog provider
- عدم ساپورت از UseStaticWebAssets
- با IIS اینتگریت نمی‌شود
- در Kestrel هم با HTTPS و Quic که قبلا اینجا معرفی شده است.


🔗 برای مشاهده توضیحات کامل می‌توانید از این لینک استفاده کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#حامد_حاجیلو (لینکدین)

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

__________

Читать полностью…

Software Philosophy

استراتژی Deployment مناسب را انتخاب کنید!

استراتژی‌های Deployment مانند دستور العمل‌هایی هستند که برای به‌روزرسانی برنامه‌ها و سرویس‌های خود بدون ایجاد اختلال در سیستم دنبال می‌کنید. آنها به شما اجازه می‌دهند به‌روزرسانی‌های خود را به روشی هوشمند و ایمن امتحان، بررسی و لغو کنید. بسته به آنچه دوست دارید و نیاز دارید، می‌توانید استراتژی‌های Deployment مختلفی را انتخاب کنید که Azure می‌تواند برای شما انجام دهد، مانند:

روش Blue-green deployment:
این استراتژی مانند این است که دو نسخه از برنامه یا سرویس خود داشته باشید، یکی برای نسخه قدیمی (آبی) و دیگری برای نسخه جدید (سبز). می‌توانید نسخه جدید را قبل از اینکه کاربران خود را به آن تغییر دهید، در نسخه سبز تست کنید. به این ترتیب می‌توانید از اشتباهات جلوگیری کنید و اگر مشکلی پیش آمد سریعا به عقب برگردید.

روش Rolling deployment:
این استراتژی مانند این است که اپلیکیشن یا سرویس خود را ذره ذره، با تغییر چند قسمت در یک زمان با نسخه جدید، به روز کنید. می‌توانید تصمیم بگیرید که چقدر سریع و چقدر می‌خواهید به‌روزرسانی کنید، و تماشا کنید که چگونه پیش می‌رود و چگونه روی سیستم شما تأثیر می‌گذارد. به این ترتیب، می‌توانید زمان خرابی را کاهش دهید و مطمئن شوید که همه چیز برای کاربرانتان به خوبی پیش می‌رود.

روش Canary deployment:
این استراتژی مانند این است که نسخه جدید برنامه یا سرویس خود را ابتدا به چند کاربر یا مکان خوش شانس، قبل از دادن آن به دیگران، بدهید. می‌توانید از این استراتژی برای مشاهده نحوه عملکرد نسخه جدید و نظر کاربران در مورد آن استفاده کنید و هر مشکل یا باگ را زودتر تشخیص دهید. به این ترتیب می‌توانید به روز رسانی خود را بهتر و قابل اطمینان‌تر کنید و همه کاربران را به یکباره ناراحت نکنید.


برای انتخاب استراتژی استقرار مناسب برای سیستم خود، باید به مواردی فکر کنید، مانند:

- برنامه یا سرویس شما چقدر بزرگ و پیچیده است.
- هر چند وقت یکبار و چقدر می‌خواهید آن را به روز کنید.
- به روز رسانی‌های شما چقدر خطرناک و مهم هستند.
- کاربران شما چه احساسی دارند و چه انتظاراتی از شما دارند.
- چه ابزارهایی برای استقرار خود دارید.

🔗 نسخه کامل مقاله را می‌توانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

🚀 جلسه بعدی مایکروسافت فارسی یکشنبه ۲۶ آذر رو از دست ندید - در مورد Azure DevOps ، Azure Pipeline و Sonar Cloud صحبت خواهد شد و اینکه چگونه می‌توانیم با استفاده از این موارد کدهای با کیفیت‌تری داشته باشم!

📢 MSFarsi Talk- Flawless code with Azure Pipeline and Sonar Cloud 📢

📢This session will be in Farsi

📢 ثبت نام رایگان:

🔗 https://events.teams.microsoft.com/event/399a7ee0-7ebd-41c0-b7e6-9051e4e6c8f3@b4c9f32e-da17-4ded-9c95-ce9da38f25d9

#محمدرضا_پازوکی

Читать полностью…

Software Philosophy

از Angular به Blazor: آزاد کردن جادوی C#!

در سفری از Angular به کامپوننت Blazor، یک ماجراجویی هیجان‌انگیز، جادوی C# را آزاد کنید! این سفر نه تنها یک تغییر در نحوه نوشتاری را به همراه دارد بلکه یک شیفت تحولی در رویکرد شما نسبت به توسعه وب را به ارمغان می‌آورد. وقتی که به دنیای Blazor وارد می‌شوید، قدرتمندی C# و اکوسیستم گسترده .NET نه تنها کد را انتقال می‌دهید بلکه به دنیای امکاناتی وارد می‌شوید که به طور سحرآمیز منطبق بر منطق کاربری است و سمت سرور به یکدیگر می‌پیوندد.

هیجان ترجمه شاهکار Angular خود را به یک جواهر Blazor تصور کنید، جایی که آشنایی با نوآوری همراه می‌شود و دقت C# سمفونی وب‌اپلیکیشن شما را ارجاع می‌دهد. این مهاجرت تنها یک گذار فنی نیست؛ بلکه فرصتی است برای بهره‌مندی از طیف کامل قابلیت‌های .NET، از دیتابایندینگ دقیق تا زیبایی پردازش رویدادها با C#.

پس کمربند خود را ببندید و آماده شوید تا ادغام پویایی Angular با استعداد C# Blazor را شاهد شوید. در این راهنمای هیجان‌انگیز، از هر مرحله‌ای از فرآیند مهاجرت عبور خواهیم کرد و جادویی را که هنگام ادغام بهترین‌های دو دنیا اتفاق می‌افتد، برملا خواهیم کرد. برای یک ماجرای کدزنی آماده شوید که نه تنها مهارت‌های شما را ارتقا می‌دهد، بلکه شور و هیجان به سفر توسعه شما تزریق می‌کند. اجازه دهید مهاجرت آغاز شود!

🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

___________

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

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

_____

Читать полностью…

Software Philosophy

کاوش در مزایای Azure Key Vault

سرویس Azure Key Vault سرویسی ابری است که ذخیره و مدیریت امن secrets، keys و certificates ها را فراهم می‌کند. این به شما امکان می‌دهد با استفاده از کلیدها و الگوریتم‌های رمزنگاری، داده‌ها را رمزگذاری، رمزگشایی، امضا و تأیید کنید. Azure Key Vault همچنین به شما امکان می‌دهد تا گواهی‌ها را برای برنامه‌ها و خدمات خود ایجاد، وارد، rotate و لغو کنید.

- یکی از مزایای استفاده از Azure Key Vault این است که خطر افشای داده‌های حساس در کد یا فایل‌های پیکربندی شما را کاهش می‌دهد.

- یکی دیگر از مزایای استفاده از Azure Key Vault این است که مدیریت گواهی‌ها و کلیدهای شما را ساده می‌کند. می‌توانید تمدید و ابطال گواهینامه‌های خود را به طور خودکار انجام دهید و همچنین بر انقضا و استفاده از آن‌ها را نظارت کنید.


برای ایجاد key vault با استفاده از Azure CLI، ابتدا باید Azure CLI را نصب کرده و به حساب Azure خود وارد شوید. سپس، می‌توانید از دستور az keyvault create برای ایجاد یک صندوق کلید با نام و یک گروه منبع استفاده کنید.
مثال:

az group create --name MyResourceGroup --location uksouth
az keyvault create --name MyKeyVault --resource-group MyResourceGroup


و برای ذخیره برخی از secrets و keys در صندوق کلید، می‌توانید از دستورات az keyvault secret set و az keyvault key create استفاده کنید.
مثال:

az keyvault secret set --name MySecret --value "Hello World" --vault-name MyKeyVault
az keyvault key create --name MyKey --vault-name MyKeyVault


🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

اگه براتون سوال پیش اومده که برنده اکانت #تلگرام_پرمیوم کدوم برناما‌نویس بوده؟ ایشون بودن:
@meisamdev

مبارکت باشه آقا میثم خوش‌شانس... 😊

Читать полностью…

Software Philosophy

هنرمندی که جهان ما را زیباتر کرد، از میان ما رفت.

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

نام و یادش گرامی.

۲۳ آبان ۱۴۰۲

Читать полностью…

Software Philosophy

سرویس Azure pipeline

یک Pipeline دنباله‌ای از مراحل است که نحوه ساخت، آزمایش و استقرار برنامه را مشخص می‌کند. شما می‌توانید یک pipeline را با استفاده از YAML یا یک رابط کاربری گرافیکی بنویسید. YAML یک قالب داده قابل خواندن برای انسان است که به شما امکان می‌دهد وظایف و تنظیمات pipeline خود را در یک فایل متنی مشخص کنید.

استفاده از Microsoft Hosted Agent
یک Microsoft Hosted Agent ماشین مجازی از پیش پیکربندی شده‌ای است که توسط مایکروسافت مدیریت می‌شود و در Azure اجرا می‌گردد. بسته به پلتفرم برنامه خود، می‌توانید از میان انواع مختلفی از hosted agents ها مانند ویندوز، لینوکس یا macOS انتخاب کنید. کار با یک Microsoft Hosted Agent بسیار راحت است زیرا نیازی به نگهداری یا به روز رسانی آن ندارید، اما دارای محدودیت‌هایی است، مانند:

- شما فقط می‌توانید یک کار را در یک زمان در یک hosted agent اجرا کنید.
- شما حداکثر ۱۸۰ دقیقه برای هر کار در یک hosted agent زمان دارید.
- شما فضای دیسک و حافظه محدودی در یک hosted agent دارید.
- شما نمی‌توانید نرم افزار یا ابزارهای سفارشی را روی یک hosted agent نصب کنید.

استفاده از Self-Hosted Agent
یک Self-Hosted Agent ماشینی است که شما مالک و مدیر آن هستید و در Azure DevOps ثبت نام می‌کنید. می‌توانید از هر دستگاهی که حداقل شرایط لازم را دارد، مانند ویندوز، لینوکس یا macOS استفاده کنید. یک Self-Hosted Agent کنترل و انعطاف پذیری بیشتری را بر روی pipeline خود به شما می‌دهد، اما به نگهداری و امنیت بیشتری نیز نیاز دارد. برخی از مزایای استفاده از یک عامل خود میزبان عبارتند از:

- شما می‌توانید چندین کار را به طور همزمان در یک نماینده خود میزبان اجرا کنید.
- شما هیچ محدودیت زمانی برای هر شغل در یک نماینده خود میزبان ندارید.
- شما فضای دیسک و حافظه بیشتری در یک عامل خود میزبان دارید.
- می‌توانید نرم‌افزار یا ابزارهای سفارشی را روی یک عامل خود میزبان نصب کنید.

استفاده از Microsoft Hosted Agent یا Self-Hosted Agent
برای تصمیم گیری در مورد استفاده از یک Microsoft Hosted Agent یا یک Self-Hosted Agent برای pipeline خود، باید موارد زیر را در نظر بگیرید:

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

به طور کلی، اگر برنامه شما ساده است و به نرم افزار یا ابزار خاصی نیاز ندارد، و اگر pipeline خود را گهگاهی و برای مدت زمان کوتاهی اجرا می‌کنید، می توانید از یک Microsoft Hosted Agent استفاده کنید. اگر برنامه شما پیچیده است و به نرم افزار یا ابزار سفارشی نیاز دارد، و اگر خط لوله خود را به طور مکرر و برای مدت طولانی اجرا می‌کنید، ممکن است بخواهید از یک Self-Hosted Agent استفاده کنید.

🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

دستیار شخصی شما در پیش برد کارهای پس زمینه!

آیا تا به حال برایتان پیش آمده است که نیاز داشته باشید یک سری کارهای پس زمینه را در .Net هندل کنید؟
احتمالا نیاز داشته‌اید یک سری جاب را Schedule کنید تا در زمان‌های مشخصی کارهای مشخصی انجام دهند.

برای هندل کردن این کارها راه کار ساده و مفیدی وجود دارد به نام Hangfire. Hangfire فریم‌ورکی open-source است که به توسعه‌دهندگان در اجرای، تنظیم و مدیریت background tasks در هر برنامه‌ای .NET کمک می‌کند. Hangfire همچنین امکان پشتیبانی از هر دو ساختار .NET Framework و .NET Core را دارد.

جاب‌ها در Hangfire نسخه‌بندی می‌شوند، مجددا امتحان می‌شوند، در صف قرار می‌گیرند و بینworker های موجود توزیع می‌شوند. 

عملیات Hangfire  در چهار دسته‌ی نوبت دهی، اجرا، تلاش مجدد و نسخه سازی دسته بندی می‌شود.

علاوه بر سادگی کانفیگ و استفاده از Hangfire، داشتن یک دشبورد عالی برای مدیریت Job  ها نکته‌ای است که Hangfire را از ابزارهای مشابه دیگر متمایز می‌کند. داشبورد Hangfire مانند یک اتاق کنترل است که به تمام نیازهای شما برای نظارت و اعمال قدرت بر روی  Job های خود مجهز است.

🔗 نسخه کامل این مقاله را ‌می‌توانید در اینجا مطالعه کنید.

🔗 لینک مقاله در ویرگول

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#نگار_قاسمی (لینکدین)

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

______

Читать полностью…

Software Philosophy

تعریف Azure Function

تابع Azure، یک راه حل بدون سرور است که به شما امکان می‌دهد تا کد کمتری بنویسید، زیرساخت کمتری را مصرف کنید و در هزینه‌ها صرفه جویی کنید. تابع Azure قطعه‌ای از کد است که در پاسخ به رویدادهای مختلف مانند درخواست‌های HTTP، تایمرها، صف‌ها، blobs و غیره اجرا می‌شود. شما می‌توانید توابع Azure را در چندین زبان مانند C#، Java، JavaScript، PowerShell، Python و غیره بنویسید. همچنین می‌توانید از ابزارهای مختلفی برای توسعه و اشکال زدایی توابع Azure استفاده کنید.

چه زمانی می‌توانیم از تابع Azure استفاده کنیم؟
می‌توانید از تابع Azure برای بسیاری از سناریوهایی که به event-driven logic و ادغام با سایر سرویس‌ها نیاز دارند، استفاده کنید. به عنوان مثال، می‌توانید از تابع Azure برای موارد زیر استفاده کنید:

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


چگونه با درخواست HTTP یک تابع Azure ایجاد و راه اندازی کنیم؟
برای ایجاد یک تابع Azure با یک تریگر HTTP، باید این مراحل را دنبال کنید:

- یک function app در پورتال Azure یا با استفاده از Azure CLI ایجاد کنید. function app ظرفی است که میزبان یک یا چند عملکرد است.

- با استفاده از HTTP trigger template، یک تابع جدید در برنامه تابع ایجاد کنید. شما می‌توانید C# را به عنوان زبان کد تابع خود انتخاب کنید.

- کد مورد نظر خود را در ویرایشگر کد بنویسید. می‌توانید از کلاس‌های HttpRequestData و HttpResponseData برای دسترسی به اشیاء درخواست و پاسخ HTTP استفاده کنید.

- با استفاده از پنل Test/Run یا با استفاده از curl یا Postman عملکرد خود را ذخیره و آزمایش کنید. می‌توانید URL تابع خود را از قسمت Function URL کپی کنید.

🔗 نسخه کامل مقاله به همراه نمونه کد را اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

ابهام زدایی از Concurrency و Racing Conditions

تعریف Concurrency:
همزمانی
به توانایی یک سیستم کامپیوتری برای اجرای چندین کار یا فرآیند به طور همزمان اشاره دارد که ظاهراً در زمان همپوشانی دارند. همزمانی مفهوم گسترده‌تری است که موازی‌سازی را در بر می‌گیرد اما لزوماً نیازی به اجرای همزمان وظایف بر روی چندین هسته CPU ندارد. این در مورد مدیریت و زمان بندی وظایف متعدد به گونه ای است که بیشترین استفاده را از منابع موجود داشته باشد.

تعریف Racing Conditions:
یک Racing Conditions نوعی باگ مربوط به همزمانی است و زمانی رخ می‌دهد که چندین رشته یا پردازش به داده‌ها یا منابع مشترک دسترسی داشته باشند و نتیجه نهایی به زمان بندی یا ترتیب اجرا بستگی دارد. به عبارت دیگر، این یک "مسابقه" بین رشته‌ها برای دسترسی و اصلاح داده‌های مشترک است و نتیجه می‌تواند غیرقابل پیش بینی و نادرست باشد.

روش های جلوگیری از Racing Conditions:
در .Net برای جلوگیری از شرایط مسابقه بین Thread ها می‌توانید از lock , Semaphores, Mutexes یا Monitors استفاده کنید. در عمل، انتخاب بهترین گزینه به نیازهای خاص برنامه شما بستگی دارد. lock اغلب ساده‌ترین و رایج‌ترین مکانیسم همگام سازی برای مدیریت همزمانی در یک فرآیند واحد است. Mutexes و Semaphores برای سناریوهای همگام سازی پیچیده‌تر شامل ارتباطات بین فرآیندی یا مدیریت منابع استفاده می‌شود. Monitors یک رویکرد شی‌گرا برای همگام سازی ارائه می‌دهند و مدیریت همگام سازی را در زمینه اشیا و روش‌ها آسان‌تر می‌کند.

🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

اگه اکانت تلگرام پرمیوم دارین دکمه زیر رو بزنین تا کانال فلسفه نرم‌افزار رو بوست کنین...
ببینیم به حد نصاب می‌رسه تعداد پرمیوم دارامون!؟

(تلگرامتون باید آپدیت باشه که دکمش بیاد)
/channel/SoftwarePhilosophy?boost

Читать полностью…

Software Philosophy

نگاهی عمیق‌تر به مفاهیم همزمانی در سی شارپ

این تیکه از کد کنده، عبارتی که احتمالا در طول تجربه کاری خود به کرات شنیده‌ایم!
علت زمان بر بودن اجرای کد شما یا وجود کاری CPU bound مثل جمع یک تا یک میلیارد ، یا کار IO bound است مثل ارسال یک HTTP Request به ازای هر مشتری.
کارهای Cpu bound کاندیداهای مناسبی برای انجام همزمان کارها هستند.
در جلسه دوم این کارگاه به بررسی عمیق تفاوت کارهای CPU bound و IO Bound پرداخته شده و اینکه چه مکانیسم‌های الگوریتمی متفاوتی برای مواجهه با آنها وجود دارد.

همچنین تفاوت‌های مفاهیم Thread و Task را با عمق بیشتر بررسی کرده و با بررسی کدهای مختلف تفاوت‌های ذاتی آنها و نحوه مواجهه .NET با آنها را شرح داده.

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

"Deep Dive into async/await: How to Unlock the Full Potential of C# Concurrency"

اسم کارگاهی هست که "مهران داودی" با هدف آموزش مفاهیم همزمانی به صورت عمیق بر گذار می‌کند.

تا کنون دو جلسه از این کارگاه برگزار شده است:

🔗 لینک ویدیوی جلسه اول
🔗 لینک ویدیوی جلسه دوم

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#نگار_قاسمی (لینکدین)

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

______

Читать полностью…

Software Philosophy

مدیریت Exception با استفاده از فیلترها در مقایسه با میان افزارها

- میان‌افزار قبل و بعد از pipeline اجرای عملیات اجرا می‌شود، بنابراین نمی‌تواند به action context یا حالت مدل دسترسی داشته باشد.

- فیلترها در داخل pipeline اجرا می‌شوند، بنابراین به action context و model state دسترسی دارد و می تواند response status code و هدرها را قبل از اینکه در response stream نوشته شود تغییر دهد.

- فیلترها برای به دام انداختن exception که در actions رخ می‌دهند مناسب هستند.

- فیلترها به اندازه میان‌افزارها برای رسیدگی به خطا انعطاف پذیر نیستند

🔗 نسخه کامل مقاله به همراه نمونه کد را می‌توانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

کلاس Random در سی شارپ thread-safe نیست!

شیوه متداولی که برنامه‌نویسان دات نت از کلاس Random استفاده می‌کنند thread-safe نیست!
منظور این کد است:

var random = new Random();
random.Next(1,100);


کد بالا thread-safe نیست ولی دات نت از ورژن NET6. به بعد، به روش زیر امکان thread-safe بودن را ایجاد کرد:

Random.Shared.Next(1, 100);


🔗 برای مشاهده توضیحات کامل می‌توانید از این لینک استفاده کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#حامد_حاجیلو (لینکدین)

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

__________

Читать полностью…

Software Philosophy

بروزرسانی ReSharper 2023.3: انقلابی در کدنویسی دات‌نت

ابزار ReSharper، ابزاری قدرتمند برای توسعه‌دهندگان دات‌نت است که با ارائه طیف گسترده‌ای از ویژگی‌ها و قابلیت‌ها، به توسعه‌دهندگان کمک می‌کند تا کد خود را با کیفیت بالاتر و سرعت بیشتری تولید کنند. نسخه 2023.3 ReSharper، با ویژگی‌های جدید و بهبودیافته خود، تجربه کدنویسی دات‌نت را به طور اساسی تغییر می‌دهد.

ویژگی‌های جدید و بهبودیافته:

🟣قابلیت Code Analysis:
🟣شناسایی مشکلات جدیدی مانند استفاده از کدهای ناکارآمد، احتمال حملات امنیتی، و مشکلات عملکردی

🟣بهبود دقت شناسایی مشکلات

🟣ارائه پیشنهادات عملی برای رفع مشکلات

مثال عملی: فرض کنید کد زیر را می‌نویسیم:

public class MyClass
{
public void MyMethod()
{
// این کد ناکارآمد است
for (int i = 0; i < 1000000; i++)
{
Console.WriteLine("i = " + i);
}
}
}


با استفاده از Code Analysis ReSharper 2023.3، می‌توان این خطا را شناسایی کرد:

[ReSharper] 'MyClass.MyMethod()' is inefficient: it uses a for loop with a large number of iterations.


🟢قابلیت Code Completion:

🟢ارائه پیشنهادات دقیق‌تر و مرتبط‌تر با context کد

🟢جلوگیری از تکمیل کدهای ناامن

🟢پشتیبانی از کدنویسی با استفاده از زبان‌های طبیعی

مثال عملی: فرض کنید کد زیر را می‌نویسیم:

public class MyClass
{
public void MyMethod()
{
// این کد ناامن است
var password = "my-password";
// ...
}
}


با استفاده از Code Completion ReSharper 2023.3، می‌توان این خطا را شناسایی کرد:

[ReSharper] 'password' is a hard-coded password. This can lead to security vulnerabilities.


🟣قابلیت Refactoring:

🔵پشتیبانی از تغییرات پیچیده‌تر مانند تغییر ساختار کد

🔵جلوگیری از بروز خطاهای احتمالی در هنگام انجام تغییرات

🔵ارائه گزارش‌های دقیق‌تر از تغییرات انجام‌شده

مثال عملی: فرض کنید کد زیر را می‌نویسیم:

public class MyClass
{
public void MyMethod()
{
// این کد می‌تواند با استفاده از refactoring بهینه شود
var list = new List<int>();
for (int i = 0; i < 100; i++)
{
list.Add(i);
}
// ...
}
}


با استفاده از Refactoring ReSharper 2023.3، می‌توان این کد را بهینه کرد:
public class MyClass
{
public void MyMethod()
{
var list = new List<int>(Enumerable.Range(0, 100));
// ...
}
}


🟢قابلیت جدید در Entity Framework:

در ReSharper 2023.3، به‌روزرسانی‌هایی در Entity Framework ارائه شده است که به توسعه‌دهندگان کمک می‌کند تا کد Entity Framework خود را با کیفیت بالاتر و سرعت بیشتری تولید کنند.

ویژگی‌های جدید و بهبودیافته:

🟢مشاهده روابط Entity Framework (ERD): ReSharper 2023.3، ابزار جدیدی برای ویرایش و مشاهده Entity Relationship Diagrams (ERDs) ارائه می‌دهد. این ابزار به توسعه‌دهندگان کمک می‌کند تا روابط بین جدول‌های Entity Framework را به‌طور واضح‌تری درک کنند.

🟢تجزیه و تحلیل و بازرسی کوئری‌های Entity Framework: ReSharper 2023.3، قابلیت‌های جدیدی برای تجزیه و تحلیل و بازرسی کوئری‌های Entity Framework ارائه می‌دهد. این قابلیت‌ها می‌توانند به توسعه‌دهندگان در شناسایی و رفع مشکلات احتمالی در کوئری‌های خود کمک کنند.

مثال‌هایی از نحوه استفاده از ویژگی‌های جدید:

🟢مشاهده روابط Entity Framework (ERD): فرض کنید یک پروژه Entity Framework داریم که شامل دو جدول به نام‌های Customer و Order است. با استفاده از ابزار Visualize Entity Framework Relationships ReSharper 2023.3، می‌توانیم ERD زیر را ایجاد کنیم:

    Customer
|
|_ Order


🟢تجزیه و تحلیل و بازرسی کوئری‌های Entity Framework: فرض کنید یک کوئری Entity Framework داریم که به صورت زیر است:
var customers = context.Customers.Where(c => c.Name.Contains("John"));


با استفاده از قابلیت‌های جدید ReSharper 2023.3، می‌توانیم مشکلات احتمالی در این کوئری را شناسایی کنیم. به عنوان مثال، ReSharper می‌تواند به ما هشدار دهد که این کوئری ممکن است کند باشد.

🔗 نسخه کامل مقاله به همراه نمونه کد را می‌توانید در اینجا مطالعه نمایید.

___________

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#هوتن_همتی (لینکدین)

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

_____

Читать полностью…

Software Philosophy

اوج پویایی صفحات وب در Blazor با NET 8.

سیر تکامل نحوه نمایش صفحات وب به این شکل بود که در ابتدا صفحاتی که کاربر درخواست میداد توسط سرور رندر می‌شد و به سمت کلاینت برمی‌گشت. این صفحات کاملا غیرتعاملی (non-intractive) بودند و اگر قصد داشتید محتوای صفحات را با مثلا کلیک کردن یا ثبت فرم و ... تغییر دهید، مجبور بودید کل صفحه html جدید را مجدد از سرور بگیرید.

کم کم JavaScript به واسطه ویژگی‌هایی که به صفحه اضافه می‌کرد باعث شد intractive بودن صفحات ایجاد شود و دیگر نیازی به جنریت کل صفحه از ابتدا نباشد. در ابتدا با امکاناتی مثل Ajax و ... این پویایی برای صفحات وب فراهم شد و در ادامه فریموورک و کتابخانه‌هایی مثل React, Angular, Blazor و... اضافه شدند که پویایی صفحات را با ارائه مفهومی تحت عنوان SPA به اوج خود رساندند.

اخیرا دات نت در آخرین آپدیت خود (NET 8.) در بیلیزور این امکان را فراهم کرده تا شما بتوانید هر قسمت از صفحه را که می‌خواهید متناسب با نیاز خود از سرور صفحه بخواهید تا جنریت کند یا در خود مرورگر کاربر این کار انجام شود.

مثلا برای این که امتیاز SEO خوبی داشته باشید می‌تونید چند صفحه اول سایت را به شکلی تنظیم کنید که از سمت سرور رندر شوند و بقیه به حالت web assembly باشند. یا حتی کامپوننت خاص در صفحه را هم می‌توانید به این صورت تنظیم کنید.

در ادامه انواع حالت‌ها برای رندر کردن صفحه را با هم می‌بینیم:
Server:

@rendermode InteractiveServer

WebAssembly:
@rendermode InteractiveWebAssembly

Auto:
@rendermode InteractiveAuto

Streaming:
@attribute [StreamRendering(prerender: true)]


هر کدام از این حالت‌ها مزایای خود را دارند و شما می‌توانید بسته به نیاز خود از آن‌ها استفاده کنید. برای فهمیدن این موضوع که کدام حالت مناسب شماست و همچنین برای مطالعه دقیق و عمیق‌تر این مباحث می‌توانید از این لینک‌ها ( 1 , 2 ) استفاده کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#حامد_حاجیلو (لینکدین)

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

__________

Читать полностью…

Software Philosophy

حفاظت در برابر مقادیر null!

در حوزه برنامه نویسی، مقادیر null مانند مین‌های پنهانی هستند که منتظر انفجار می‌باشند و باعث خطاهای غیرمنتظره در زمان اجرا می‌شوند، منجر به منطق نادرست می‌شوند و اشکال زدایی را سخت‌تر می‌کنند. این یکی از رایج‌ترین مشکلاتی است که توسعه‌دهندگان با آن مواجه هستند، NullReferenceException مخوف است. به همین دلیل مهم است که قبل از استفاده از یک object reference در کد، مقادیر null را بررسی کنید.


بررسی null بطور سنتی با == اپراتور


یک راه برای انجام این کار استفاده از عملگر == است که دو operands را برای برابری مقایسه می‌کند.
برای مثال می‌توانید بنویسید:

var product = GetProduct();
if (product == null) {
// Do something if the object is null.
}


این رویکرد دارای معایبی است. عملگر == می‌تواند توسط یک کلاس overload شود، به این معنی که ممکن است هنگام مقایسه یک شی با null، آنطور که انتظار دارید رفتار نکند. برای مثال، اگر کلاس یک عملگر برابری سفارشی را تعریف کند که همیشه true را برمی‌گرداند، آنگاه بررسی null همیشه ناموفق خواهد بود.

استفاده از عملگر is

برای جلوگیری از این مشکلات، سی شارپ راه بهتری برای بررسی مقادیر null ارائه می دهد: عملگر is.
عملگر is یک عملیات pattern-matching را روی یک عبارت انجام می‌دهد و اگر با یک الگوی مشخص مطابقت داشته باشد، مقدار true را برمی‌گرداند.

var product = GetProduct();
if (product is null) {
// Do something if the object is null.
}

این روش چند مزیت دارد:
- اولاً، عملگر is نمی‌تواند توسط یک کلاس overload شود، بنابراین هنگام بررسی مقادیر تهی، همیشه به طور مداوم رفتار می‌کند.
- دوم، عملگر is خواناتر و رساتر از عملگر == است، زیرا به وضوح بیان می‌کند که چه چیزی را بررسی می‌کنید.
- سوم، عملگر is از negation patterns پشتیبانی می‌کند که به شما امکان می‌دهد مقادیر غیر تهی را نیز بررسی کنید.

🔗 نسخه کامل مقاله به همراه نمونه کد را می‌توانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

مقایسه 🚀Azure Functions vs. Azure Durable Functions🔄

سرویس Azure Function یک سرویس محاسباتی بدون سرور است که به شما امکان می دهد بدون مدیریت زیرساخت سرور یا سیستم عامل کد را اجرا کنید.

از طرف دیگر، Azure Durable Function یک برنامه افزودنی از Azure Function است که به شما امکان می‌دهد توابع stateful را در محیط بدون سرور بنویسید.
توابع Stateful می‌توانند حالت را در چندین اجرا حفظ کنند و با استفاده از durable tasks، گردش‌های کاری پیچیده را هماهنگ کنند. durable tasks، عملکردهایی هستند که می توانند توسط عملکرد orchestrator function، منتظر و دوباره اجرا شوند.


زمان استفاده از Azure Function:
- سناریوهای Event-Driven
- زمانی که بخواهیم بخش کوچکی از Units of Code را اجرا کنیم.
- زمانی که Cost-Efficient Scaling مد نظر باشد.

زمان استفاده از Azure Durable Function:
- زمانی که پردازهای Long-Running داریم.
- زمانی که به Stateful Orchestration نیازمندیم.
- زمانی که Monitoring and Debugging مدنظر باشد.

🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

نگاهی عمیق‌تر به جادوی async و پشت صحنه‌ی آن در سی‌شارپ

کلمات کلیدی async و  await از نسخه C# 5.0 اضافه شدند.
شما می‌توانید با اضافه کردن کلمه کلیدی async، یک متد را Asynchronous کنید و در آن از await استفاده کنید.
این عبارت به کامپایلر می‌گوید صبر کند تا عملیات ناهمگام به پایان برسد ولی در این حین اگر به thread نیازی نبود آزاد شود و به کارهای دیگر بپردازد. اضافه کردن چنین فیچری به یک زبان در پشت صحنه اصلا کار ساده‌ای نیست.

در این ورک‌شاپ کمی بیشتر به اعماق دات‌نت می‌رویم و می‌بینیم که با async کردن یک متد چه اتفاقاتی در پشت صحنه می‌افتد و چطور عملا آن متد جراحی می‌شود!

"Deep Dive into async/await: How to Unlock the Full Potential of C# Concurrency"

اسم کارگاهی است که «مهران داودی» با هدف آموزش مفاهیم همزمانی به صورت عمیق برگذار می‌کند.

تا کنون سه جلسه از این کارگاه برگزار شده است:
🔗 لینک ویدیوی جلسه اول
🔗 لینک ویدیوی جلسه دوم
🔗 لینک ویدیوی جلسه سوم

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#نگار_قاسمی (لینکدین)

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

______

Читать полностью…

Software Philosophy

امشب ساعت t=2^3 یه اکانت تلگرام پرمیوم به صورت رندوم به یکی از اعضای کانال اهدا می‌شه. 🕺

Читать полностью…

Software Philosophy

مقایسه Azure Event Grid و Event Hub

سرویس Azure Event Grid سرویسی است که به شما امکان می‌دهد رویدادها را از هر منبعی به هر مقصدی هدایت کنید. می‌توانید از آن برای واکنش به تغییرات منابع Azure خود مانند storage blobs، resource groups یا subscriptions استفاده کنید. همچنین می‌توانید از آن برای ادغام با سرویس‌های third-party مانند GitHub، Twilio یا SendGrid استفاده کنید.

سرویس Azure Event Hub سرویسی است که به شما امکان می‌دهد حجم زیادی از داده‌های streaming را دریافت و پردازش کنید. می‌توانید از آن برای گرفتن داده‌ها از دستگاه‌ها، حسگرها، برنامه‌ها یا گزارش‌ها استفاده کنید. Azure Event Hub می‌تواند میلیون‌ها رویداد در ثانیه را با تأخیر کم و قابلیت اطمینان بالا مدیریت کند. همچنین می‌توانید از آن برای تجزیه و تحلیل و تبدیل داده‌ها با استفاده از تحلیل جریان Azure، Azure Functions یا Spark استفاده کنید.

تفاورت Azure Event Grid و Azure Event Hub
تفاوت اصلی بین Azure Event Grid و Azure Event Hub در نوع رویدادهایی است که آن‌ها مدیریت می‌کنند. Azure Event Grid رویدادهای گسسته را کنترل می‌کند، که رخدادهایی منفرد هستند و نشان دهنده یک تغییر حالت یا یک عمل هستند. به عنوان مثال، یک فایل در حال ایجاد، یک منبع در حال به روز رسانی، یا یک پیام در حال ارسال است. Azure Event Hub رویدادهای telemetry را مدیریت می‌کند، که جریان‌های پیوسته‌ای از داده‌ها هستند که اندازه گیری‌ها یا مشاهدات را نشان می‌دهند. برای مثال، خواندن دما، به‌روزرسانی‌های مکان یا رویدادهای کلیک.

🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

سرویس‌های Azure Container:
راهنمای میزبانی Docker Images

اگر با docker کار می‌کنید و می‌خواهید آنها را در Azure مستقر کنید، ممکن است تعجب کنید که از کدام سرویس استفاده کنید. Azure چندین گزینه برای میزبانی docker images ارائه می‌دهد، مانند Container Registry، Container Instance، Container App و Web App for Containers.

سرویس Container Registry
سرویس Container Registry یک سرویس رجیستری خصوصی است که به شما امکان می‌دهد docker images های خود را در Azure ذخیره و مدیریت کنید. می‌توانید از آن برای push و pull کردن image ها از هر کلاینت داکر استفاده کنید یا آن را با سایر سرویس‌های Azure مانند Azure DevOps، Azure Kubernetes Service یا Azure Functions ادغام کنید.


سرویس Container Instances
سرویس Container Instances سرویسی است که به شما امکان می‌دهد برنامه‌های تک کانتینری یا چند کانتینری را در Azure بدون نیاز به مدیریت زیرساخت اجرا کنید. می‌توانید در صورت درخواست، نمونه‌های کانتینر را ایجاد و حذف کنید و فقط برای منابعی که استفاده می‌کنید پول پرداخت کنید.

سرویس Container App
سرویس Container App سرویس جدیدی است که به شما امکان می‌دهد برنامه های کانتینری را در Azure با حداقل پیکربندی و مدیریت اجرا کنید. می‌توانید docker های خود را در یک محیط بدون سرور مستقر کنید که به‌طور خودکار بر اساس تقاضا کاهش یا افزایش می‌یابد.

سرویس Web App for Containers
سرویس Web App for Containers سرویسی است که به شما امکان می‌دهد برنامه های وب را در Azure با استفاده از docker image اجرا کنید. می‌توانید image های خود را از Container Registry یا هر رجیستری دیگر deploy کنید و از ویژگی‌ها و ابزارهای مشابه برنامه‌های وب معمولی مانند دامنه‌های سفارشی، گواهی‌های SSL، اسلات‌های استقرار، پشتیبان‌گیری و تشخیص استفاده کنید.

🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

به قول جادی : " Git خیییییلی بزرگه، من شک دارم خود توروالدز هم همه اش رو یادش باشه همیشه "

ولی دونستنش خیلی مهمه چون Git ابزاریه که به ما کمک میکنه بتونیم مثل چرخ دنده های ساعت خیلی روون و تمیز کنار هم کد بزنیم

این به کنار، وقتی میخوایم روی یه پروژه اوپن سورس مشارکت کنیم هم نیازه به Git مسلط باشیم

برای همن ما تصمیم گرفتیم تمام فرایند های اصلی‌ای که Git درش استفاده میشه رو در یه کارگاه عملی و رایگان مرور کنیم:

از 0 تا 100 توسعه یه فیچر یا رفع یه باگ
ریو کردنش
تستش
در نهایت بردنش رو پروداکشن

از طرفی برای 40 نفر از کسایی که دوس دارن اولین ( یا چندمین ) مشارکتشون در دنیای اوپن سورس رو انجام بدن یه تعداد تسک خیلی ساده ( در حد اصلاح یه کلمه ) آماده کردیم تا خیلی راحت اولین contribute شون رو انجام بدن

که فرصت خیلی خوبی برای hacktoberfest هم هست !

از همین پایین میتونی تو رویداد شرکت ( attend ) کنی. (کارگاه رایگان هست)
https://www.linkedin.com/events/gitworkshop7118506016878510080/theater/

اطلاع رسانی ها و ویدیو ضبط شده دوره رو توی این کانال تلگرامی میذاریم :
/channel/hacktoberfest_fa

Читать полностью…

Software Philosophy

تعریف اتمام کار چیست ( DoD - Definition of Done)؟

یکی از مفاهیم کلیدی در توسعه نرم افزار چابک، تعریف اتمام کار (DoD) است. DoD مجموعه‌ای از معیارهایی است که یک User Story یا یک ویژگی قبل از اینکه کامل شده و آماده تولید در نظر گرفته شود باید آن‌ها را رعایت کند. DoD کمک می کند تا اطمینان حاصل شود که کیفیت و عملکرد محصول با انتظارات ذینفعان سازگار و همسو است.

تعریف DoD بسته به زمینه و محدوده پروژه می تواند متفاوت باشد. با این حال، همیشه باید توسط همه اعضای تیم درگیر در فرآیند توسعه، مانند صاحبان محصول، مدیران پروژه، توسعه دهندگان و اعضای تیم QA، به صورت واضح مورد توافق قرار گیرد.

تعریف DoD ابزار قدرتمندی است که می‌تواند به بهبود کیفیت، کارایی و همکاری تیم‌های توسعه نرم افزار چابک کمک کند. با داشتن یک DoD درست و ایده‌آل، می‌توانیم اطمینان حاصل کنیم که محصولات ارزشمندی را ارائه می‌دهیم که نیازها و انتظارات مشتریان ما را برآورده می‌کند.


🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

وراثت یا ترکیب Inheritance vs Composition، مسئله این است!

درک Inheritance
وراثت مفهومی اساسی در برنامه نویسی شی گرا (OOP) است که راهی برای ایجاد کلاس‌های جدید از کلاس‌های موجود است. وراثت زمانی مفید است که بخواهیم یک رابطه "is-a" بین کلاس‌ها را مدل کنیم. به عنوان مثال، یک کلاس Dog می‌تواند از یک کلاس Animal ارث ببرد، زیرا سگ یک حیوان است.

زمان استفاده و عدم استفاده از Inheritance
زمانی که می‌خواهید یک رابطه "is-a" را مدل کنید، از وراثت استفاده کنید. به عنوان مثال، سگ نوعی خاص از حیوانات است. در چنین مواردی، وراثت می‌تواند منجر به کد پاک و شهودی شود. با این حال، معایبی نیز دارد. یکی از این معایب این است که وراثت یک رابطه محکم بین کلاس‌ها ایجاد می‌کند، به این معنی که هر تغییری در کلاس والد می‌تواند بر کلاس‌های فرزند تأثیر بگذارد.

اشکال دیگر این است که Inheritance می‌تواند منجر به تعمیم بیش از حد و سردرگمی شود. به عنوان مثال، اگر بخواهیم یک کلاس Bird ایجاد کنیم که از Animal ارث می‌برد، چه می‌شود؟ آیا باید روش‌های خوردن و خوابیدن را نیز به ارث ببریم؟ اگر بخواهیم یک کلاس پنگوئن بسازیم که از Bird به ارث می‌برد چه؟ آیا باید متد Fly را هم به ارث ببریم؟

درک Compositin
ترکیب یکی دیگر از مفاهیم OOP است که در آن یک کلاس با ترکیب چندین شی از کلاس‌های دیگر ساخته می‌شود. ترکیب بندی بر اساس ایده رابطه "has-a" بین طبقات است. به عنوان مثال، یک کلاس Car دارای یک کلاس Engine، یک کلاس Wheel، یک کلاس Door و غیره. Composition زمانی مفید است که بخواهیم اشیاء پیچیده‌ای را که از اشیاء ساده‌تری تشکیل شده‌اند مدل‌سازی کنیم.

زمان استفاده و عدم استفاده از Composition
ترکیب روشی انعطاف‌پذیر برای ایجاد کلاس‌های جدید از کلاس‌های موجود است، زمانی که می‌خواهید یک رابطه "has-a" را مدل کنید از ترکیب استفاده کنید. با این حال، معایبی نیز دارد. یکی از از این معایب این است که ترکیب می تواند منجر به تکرار کد و پیچیدگی شود.

به عنوان مثال، اگر بخواهیم یک کلاس Truck ایجاد کنیم که مشابه کلاس Car باشد، اما چرخ‌های بیشتری داشته باشد و موتور متفاوتی داشته باشد چه؟ آیا باید کد را از کلاس Car کپی و پیست کنیم و آن را اصلاح کنیم؟ اگر بخواهیم یک کلاس موتور سیکلت ایجاد کنیم که فقط دو چرخ و یک موتور متفاوت داشته باشد، چه؟ آیا باید یک کلاس جدید از ابتدا ایجاد کنیم؟

🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

آیا زمان استفاده از Blazor رسیده است؟

توسعه وب یک زمینه سریع و پویا است که در آن فناوری‌ها و framework های جدید دائماً برای برآورده کردن نیازها و انتظارات کاربران و توسعه‌دهندگان پدیدار می‌شوند. در این پست ، سه چارچوب محبوب توسعه وب را با هم مقایسه خواهیم کرد: Blazor، Angular و React.

فریم ورک Blazor

فریم ورک Blazor برای ساخت برنامه‌های کاربردی وب تعاملی با استفاده از سی شارپ و دات نت است که به توسعه دهندگان این امکان را می‌دهد تا کدهای فرانت‌اند و بک‌اند را به یک زبان بنویسند و از ابزارهای مشابهی مانند Visual Studio و NET Core استفاده کنند. Blazor کد C# را در مرورگر با استفاده از WebAssembly، یک فرمت دستورالعمل باینری که می‌تواند توسط مرورگرهای وب مدرن اجرا شود، اجرا می کند. Blazor همچنین از رندر سمت سرور پشتیبانی می کند، جایی که کد C# بر روی سرور اجرا می‌شود و رابط کاربری از طریق SignalR به روز می‌شود.

فریم ورک Angular

فریم ورکAngular برای ساخت برنامه‌های کاربردی وب با استفاده از TypeScript می‌باشد و یک superset جاوا اسکریپت است که تایپ استاتیک و سایر ویژگی‌ها را اضافه می‌کند. Angular از HTML به عنوان یک زبان قالب استفاده می‌کند و اتصال داده، تزریق وابستگی، مسیریابی، تست و سایر ویژگی‌ها را ارائه می‌دهد. Angular کد TypeScript را با استفاده از موتورهای جاوا اسکریپت مانند V8 یا SpiderMonkey در مرورگر اجرا می‌کند.

فریم ورک React

فریم ورک React برای ساخت رابط‌های کاربری با استفاده از جاوا اسکریپت و JSX است، یک syntax extension که امکان نوشتن عناصر HTML مانند در جاوا اسکریپت را فراهم می کند. React از یک DOM مجازی برای مدیریت وضعیت UI استفاده می کند و DOM واقعی را فقط در صورت لزوم به روز می‌کند. React همچنین از رندر سمت سرور پشتیبانی می‌کند، جایی که کد جاوا اسکریپت بر روی سرور اجرا می‌شود و HTML به مرورگر ارسال می‌شود.

آیا پروژه منبع باز برای شروع Blazor وجود دارد؟

بله، پروژه های منبع باز مبتنی بر Blazor در حال افزایش هستند. به عنوان مثال، Bitplatform یک گزینه عالی برای شروع کار شما است. آنها ادعا می‌کنند که در مقایسه با سایر فریم ورک‌ها مانند Telerik، Syncfusion و موارد دیگر، کمترین اندازه فایل را دارند.


🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

استفاده موثر و درست از HTTP Client

استفاده درست از HttpClient و DelegatingHandler در ASP.NET Core برای ایجاد کلاینت‌های HTTP سفارشی می‌تواند نگرانی‌های عمومی مانند لاگ ورود به سیستم، احراز هویت، ذخیره‌سازی و غیره را مدیریت کند.

- یک HttpClient کلاسی است که یک انتزاع سطح بالا برای ارسال درخواست‌های HTTP و دریافت پاسخ های HTTP فراهم و از عملیات asynchronous cancellation tokens, headers, content پشتیبانی می‌کند. می‌توانید از HttpClient برای مصرف هر سرویس HTTP، مانند REST API، خدمات SOAP و غیره استفاده کنید.

- یک DelegatingHandler کلاسی انتزاعی است که کنترل کننده‌ای برای درخواست‌ها و پاسخ‌های HTTP را نشان می‌دهد. می‌تواند به عنوان یک میان افزار در خط لوله HTTP عمل کند و درخواست‌ها و پاسخ‌ها را قبل از رسیدن به مقصد نهایی رهگیری و اصلاح کند. همچنین می‌توانید زیر کلاس‌های DelegatingHandler خود را ایجاد کنید و منطق خاصی را برای مشتریان HTTP خود پیاده سازی کنید.

🔗 نسخه کامل مقاله به همراه نمونه کد را میتوانید در اینجا مطالعه نمایید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…

Software Philosophy

✏️ آشنایی و پیاده سازی Value Object

یک Value Object الگویی برای طراحی است که یک شیء تغییرناپذیر را با برابری بر اساس وضعیت آن نشان می‌دهد، نه هویت آن. به این معنی که دو Value Object با هم برابرند، در صورتی که بدون توجه به Reference، خواص و مقادیر یکسانی داشته باشند.

یک Value Object دارای این ویژگی‌ها است:
- تغییرناپذیر است!
- هیچ هویتی ندارد، به این معنی که یک شناسه منحصر به فرد یا ارجاع به شی دیگری ندارد!
- مستقل است!
- قابل مقایسه است!

✏️ برای مشاهده جزئیات پیاده سازی Value Object و نحوه استفاده آن در EF اینجا را مطالعه کنید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#محمدرضا_پازوکی (لینکدین)

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

______

Читать полностью…
Subscribe to a channel