مقدمه
به فصل پایانی این دوره خوش آمدید! تا به اینجا، ما یک سفر طولانی را در دنیای C# و
.NET طی کردهایم، از مبانی زبان گرفته تا مفاهیم پیشرفتهای مانند برنامهنویسی موازی،
انعکاس و ساخت وبسرویس. در تمام سناریوهای وب، یک فرض مشترک وجود داشت: منطق سمت سرور با
C# نوشته میشود، اما منطق تعاملی سمت کلاینت (در مرورگر) نیازمند استفاده از
JavaScript است. اما چه میشد اگر میتوانستیم از همان زبان قدرتمند C# و
اکوسیستم غنی .NET برای ساخت رابطهای کاربری وب نیز استفاده کنیم؟
این دقیقاً همان رویایی است که Blazor آن را به واقعیت تبدیل کرده است.
Blazor یک فریمورک مدرن و انقلابی از مایکروسافت است که به توسعهدهندگان اجازه میدهد
تا اپلیکیشنهای وب تعاملی و تکصفحهای (Single-Page Applications - SPAs) را با استفاده از
C# و HTML بسازند، به جای اینکه مجبور به استفاده از JavaScript
باشند. این به معنای اشتراکگذاری کد و منطق بین سمت سرور و کلاینت، استفاده از هزاران کتابخانهی
NuGet موجود، و بهرهمندی از تمام قدرت زبان C# برای ساخت رابطهای کاربری
است.
چگونه Blazor کار میکند؟ مدلهای میزبانی
"جادوی" Blazor در مدلهای میزبانی (Hosting Models) انعطافپذیر آن نهفته است.
Blazor منطق رندر کردن رابط کاربری را از نحوهی اعمال بهروزرسانیها در DOM
مرورگر جدا میکند. دو مدل میزبانی اصلی برای Blazor وجود دارد:
۱. Blazor Server
در این مدل، اپلیکیشن شما بر روی سرور اجرا میشود.
- وقتی کاربر به سایت مراجعه میکند، یک اتصال آنی و دوطرفه بین مرورگر و سرور با استفاده از
تکنولوژی SignalR برقرار میشود.
- تمام منطق C# و پردازش رویدادها (مانند کلیک کردن یک دکمه) بر روی سرور اتفاق
میافتد.
- Blazor تغییرات لازم در HTML را محاسبه کرده و تنها آن "دلتا" یا تفاوت
را از طریق اتصال SignalR به مرورگر ارسال میکند.
- مرورگر این تغییرات کوچک را دریافت و DOM را بهروزرسانی میکند.
مزایا: حجم دانلود اولیه بسیار کم است (چون هیچ .NET Runtime یا کدی به
کلاینت ارسال نمیشود)، و برنامه به تمام قابلیتهای سمت سرور دسترسی کامل دارد.
معایب: به یک اتصال دائمی به سرور نیاز دارد و هر تعامل کاربر نیازمند یک سفر رفت
و برگشت به سرور است که میتواند منجر به تأخیر (latency) شود.
۲. Blazor WebAssembly
در این مدل، اپلیکیشن شما مستقیماً در مرورگر کاربر اجرا میشود.
- هنگام اولین بازدید، یک نسخهی کامل از .NET Runtime که به فرمت
WebAssembly (Wasm) کامپایل شده، به همراه تمام DLLهای
برنامهی شما، به مرورگر دانلود میشود.
- WebAssembly یک استاندارد باز و یک فرمت باینری سطح پایین است که به کد نوشته شده در
زبانهایی مانند C، C++ و C# اجازه میدهد تا با سرعتی نزدیک به کد بومی، در
مرورگرهای وب مدرن اجرا شود.
- پس از دانلود اولیه، تمام پردازشها، منطق و رندر کردن UI به طور کامل در مرورگر و
بدون نیاز به اتصال به سرور انجام میشود.
مزایا: اپلیکیشن میتواند به صورت کاملاً آفلاین کار کند و پس از بارگذاری اولیه،
بسیار سریع و پاسخگو است.
معایب: حجم دانلود اولیه بسیار بزرگتر است و ممکن است بارگذاری اولیه کمی طول
بکشد. همچنین، اجرای کد در مرورگر با محدودیتهای امنیتی جعبه شنی (sandbox) مواجه است.
کامپوننتها: بلوکهای سازندهی UI در Blazor
صرفنظر از مدل میزبانی، رابط کاربری در Blazor با استفاده از کامپوننتهای
(Components) قابل استفاده مجدد ساخته میشود. یک کامپوننت، یک قطعهی خودکفا از
UI است که شامل نشانهگذاری HTML و منطق پردازشی C# میباشد. این
کامپوننتها در فایلهایی با پسوند .razor نوشته میشوند.
یک کامپوننت ساده میتواند به شکل زیر باشد:
Counter.razor
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
این کامپوننت یک شمارندهی ساده را پیادهسازی میکند. بخش @code حاوی منطق C# است. ما
یک فیلد خصوصی currentCount برای نگهداری وضعیت داریم. با استفاده از @onclick رویداد کلیک
دکمه را به متد IncrementCount خود متصل کردهایم. هر زمان که کاربر روی دکمه کلیک میکند، این
متد اجرا شده، مقدار currentCount افزایش یافته و Blazor به طور خودکار بخش
را برای نمایش مقدار جدید، بهروزرسانی میکند. این مدل برنامهنویسی کامپوننتمحور، ساخت رابطهای
کاربری پیچیده را بسیار ساده و مدیریتپذیر میکند.