از Xamarin تا .NET MAUI: سفری به سوی آینده توسعه چندسکویی
Xamarin.Forms: نگاهی به گذشته
Xamarin.Forms به توسعهدهندگان این امکان را میداد که با یک پایگاه کد مشترک (Common Codebase) از C# و XAML، اپلیکیشنهایی را برای پلتفرمهای موبایل (Android و iOS) و دسکتاپ (Windows UWP) توسعه دهند.
ویژگیهای اصلی Xamarin.Forms:
-
اشتراکگذاری منطق برنامه: بخش عمدهای از منطق برنامه (Business Logic) میتوانست در یک کتابخانه مشترک (Portable Class Library/PCL) با پلتفرمها به اشتراک گذاشته شود.
-
پروژههای چندگانه: ساختار پروژه در Xamarin معمولاً شامل چندین پروژه بود: یک پروژه مشترک برای UI و منطق، و پروژههای جداگانه برای هر پلتفرم (مثلاً Xamarin.Android، Xamarin.iOS و Xamarin.UWP). این امر مدیریت و نگهداری کد را کمی پیچیده میکرد.
-
Renderers (ارائهدهندهها): Xamarin.Forms از مفهوم Renderers استفاده میکرد که یک عنصر رابط کاربری مشترک (مانon، Label) را به کنترلهای بومی (Native Controls) متناظر در هر پلتفرم تبدیل میکرد. این فرآیند گاهی اوقات میتوانست بر عملکرد تأثیر بگذارد.
NET MAUI. : گامی رو به جلو
.NET MAUI بر اساس درسهای آموختهشده از Xamarin.Forms ساخته شده و با استفاده از معماری نوین .NET، به دنبال ارائهی بهترین راهحل برای توسعه چندسکویی است.
تعریف .NET MAUI:
.NET MAUI یک فریمورک منبع باز (Open-Source) و چندسکویی است که به توسعهدهندگان اجازه میدهد اپلیکیشنهای بومی و کارآمدی را برای Android، iOS، macOS و Windows با یک پایگاه کد واحد (Single Codebase) و تجربهی توسعهی یکپارچه بسازند. این فریمورک بخشی از اکوسیستم بزرگتر .NET است که هدف آن یکپارچهسازی تمام پلتفرمهای داتنت است.
تفاوتهای کلیدی بین Xamarin.Forms و .NET MAUI
جدول زیر تفاوتهای اساسی را خلاصه میکند:
| ویژگی | Xamarin.Forms | .NET MAUI |
| نسخه .NET | بر پایه Mono و .NET Framework/.NET Core (بسته به پروژه) | بر پایه .NET 6 و نسخههای بالاتر (یکپارچهسازی کامل) |
| ساختار پروژه | چند پروژهای (یک پروژه مشترک + پروژههای جداگانه برای هر پلتفرم) | تک پروژهای (Single Project) برای تمام پلتفرمها |
| پشتیبانی از پلتفرم | عمدتاً Mobile (Android، iOS) و UWP | Mobile و Desktop (Android، iOS، Windows، macOS) |
| معماری UI | استفاده از Renderers (مفاهیم وابسته به پلتفرم) | استفاده از Handlers (جفت شدن کمتر با پلتفرم) |
| تجربه توسعه | نیاز به راهاندازی و نگهداری چند پروژه | سادهتر، با مدیریت آسانتر منابع و کدنویسی کمتر برای پلتفرمهای خاص |
| قابلیتهای جدید | پشتیبانی از MVVM و XAML | پشتیبانی از MVVM، XAML، MVU (Model-View-Update) و Blazor |
| ابزارهای ساخت | سیستم پروژه قدیمی (Old Project System) | سیستم پروژه SDK-Style (سادهتر و سازگار با CLI داتنت) |
| پایان پشتیبانی | پشتیبانی مایکروسافت پایان یافته است (مه ۲۰۲۴) | پشتیبانی فعال و توسعه مداوم توسط مایکروسافت |
معماری و ساختار پروژه: انقلاب تک پروژهای
یکی از بزرگترین و مهمترین تفاوتها، تغییر از ساختار چند پروژهای (Multi-Project) Xamarin به ساختار تک پروژهای (Single Project) در .NET MAUI است.
ساختار Xamarin.Forms:
در Xamarin.Forms، برای ساخت یک برنامه، حداقل به سه پروژه نیاز بود:
-
پروژه مشترک (Forms Library): برای کد C# و XAML مشترک.
-
پروژه Android: برای کدهای خاص Android و منابع بومی.
-
پروژه iOS: برای کدهای خاص iOS و منابع بومی.

ساختار .NET MAUI:
.NET MAUI تمام این پروژهها را در یک پروژه واحد ادغام میکند. این رویکرد مزایای بزرگی دارد:
-
سادگی: مدیریت تمام کدها و منابع (تصاویر، فونتها) در یک مکان آسانتر است.
-
چندهدفی (Multi-targeting): به راحتی میتوان هدف ساخت (Build Target) را بین پلتفرمها تغییر داد.
-
منابع مشترک: فایلهای منابع (مانند تصاویر) در یک مکان ذخیره میشوند و .NET MAUI به طور خودکار آنها را برای استفاده در پلتفرمهای مختلف بهینهسازی میکند.
مکانیزم UI: مهاجرت از Renderers به Handlers
تغییر در نحوه تبدیل عناصر مشترک UI به کنترلهای بومی پلتفرم نیز یک تحول اساسی است.
Renderers (Xamarin.Forms):
Xamarin از Renderers برای رندر کردن ویژوالها استفاده میکرد. این مکانیزم سنگین بود و Renderers به شدت با مفهوم BindableObject در Xamarin.Forms جفت (Coupled) شده بودند. این طراحی فرآیند سفارشیسازی کنترلها را پیچیده میکرد.
Handlers (NET MAUI.):
.NET MAUI با معرفی مفهوم Handlers، این مشکل را حل کرده است. Handlers یک رویکرد سبکتر و مدرنتر برای نگاشت عناصر UI مشترک به کنترلهای بومی هستند.
-
جفتشدگی کمتر: Handlers از جفتشدگی کمتری با فریمورک اصلی برخوردارند، که این امر به عملکرد بهتر و سفارشیسازی آسانتر کنترلها منجر میشود.
-
قابلیتهای بومی (Native Access): دسترسی به APIهای بومی (Native APIs) پلتفرم در .NET MAUI سادهتر شده است.
مزایای کلیدی .NET MAUI
-
توسعه دسکتاپ (Desktop Development): بزرگترین مزیت .NET MAUI، گسترش دامنهی پلتفرمها به macOS و Windows (با استفاده از WinUI 3) است. این بدان معناست که میتوان با همان C# و XAML برنامههای دسکتاپ بومی و قدرتمندی ساخت.
-
عملکرد (Performance): به دلیل استفاده از .NET 6 به بالا، ساختار Handler-based و بهینهسازیهای دیگر، برنامههای .NET MAUI معمولاً سریعتر و کارآمدتر از برنامههای Xamarin.Forms اجرا میشوند.
-
توسعهپذیری و MVU: علاوه بر MVVM و XAML، .NET MAUI از الگوی Model-View-Update (MVU) نیز پشتیبانی میکند که رویکردی مدرنتر برای مدیریت حالت (State) برنامه است. همچنین، میتوان از Blazor برای توسعه UI در اپلیکیشنهای .NET MAUI استفاده کرد.
-
یکپارچهسازی .NET: .NET MAUI بخشی از یک پلتفرم یکپارچه (Unified .NET Platform) است که توسعهدهنده را قادر میسازد تا از یک مجموعهی واحد از کتابخانهها، ابزارها و SDK برای تمام انواع برنامهها (موبایل، دسکتاپ، وب و Cloud) استفاده کند.
مهاجرت از Xamarin به .NET MAUI: ضرورت و مراحل
با توجه به پایان یافتن پشتیبانی از Xamarin.Forms، مهاجرت به .NET MAUI یک ضرورت برای حفظ امنیت، دریافت بهروزرسانیها و استفاده از قابلیتهای مدرن است.
مراحل کلی مهاجرت:
-
بهروزرسانی به .NET: پروژههای Xamarin باید به نسخه سازگار با .NET MAUI (مانند .NET 6 یا بالاتر) ارتقا یابند.
-
تبدیل ساختار پروژه: تبدیل ساختار چند پروژهای قدیمی به ساختار تک پروژهای .NET MAUI.
-
تبدیل UI: بهروزرسانی کدهای XAML و C# برای استفاده از Handlers جدید به جای Renderers.
-
استفاده از دستیار بهروزرسانی: مایکروسافت ابزارهایی مانند .NET Upgrade Assistant را برای خودکارسازی بخشهایی از این فرآیند ارائه کرده است.
نتیجهگیری
.NET MAUI نه فقط یک تغییر نام، بلکه یک بازنویسی اساسی و یک تکامل ضروری برای Xamarin.Forms است. این فریمورک با ارائهی یک معماری تک پروژهای ساده، مکانیزم Handlers کارآمد و پشتیبانی گسترده از پلتفرمها (موبایل و دسکتاپ)، آیندهی توسعه چندسکویی در اکوسیستم مایکروسافت است. برای هر توسعهدهندهای که با C# و .NET کار میکند، یادگیری و مهاجرت به .NET MAUI، گامی حیاتی برای توسعهی اپلیکیشنهای مدرن، پرقدرت و امن به شمار میآید.
0 نظر
هنوز نظری برای این مقاله ثبت نشده است.