صادق شجری
صادق شجری
خواندن ۴ دقیقه·۴ سال پیش

رویای مولتی پلتفرم در دات نت با استفاده از Uno Platform


در دنیای مدرن مهندسی کامپیوتر و نرم افزار، یکی از برجسته ترین بحث ها، بحث توسعه کد نویسی در مولتی پلتفرم می باشد. بدین معنی که یک بار کد بزنید (UI و Backend) و بتوانید در قالب چندین پلتفرم از آن خروجی بگیرید. برای مثال، از کد واحد خود، خروجی apk برای اندروید، ipa برای iOS، خروجی لینوکس، مک، ویندوز، و حتی وب سایت بگیرید! هیجان انگیزه نه؟

اما این خواسته، دور از ذهن و در سطح رویای دوردست نیست. بلکه صنعت نرم افزار به سرعت به این سمت در حال حرکت است. برای مثال، کاتلین قدم های خوبی در این مسیر برداشته و بعید نیست امسال در سال 2021 نسخه ای پایدار از مولتی پلتفرم خود را ارائه دهد.

فریمورک دات نت نیز از این داستان مثتثنی نیست و در صدد است هرچه زودتر و قوی تر به این مهم دست یابد. شاید Uno Platform نسخه ای رسمی از دات نت و مایکروسافت نباشد، اما تیم فعالی که روی این پلتفرم در حال کار هستند، همگی از تیم مایکروسافت و توسعه دات نت هستند. پس می شود منتظر اعلام رسمی چیزی شبیه به Uno بود!


احتمالا تا کنون به میزان کافی مشتاق جزئیات و معرفی Uno Platform شده اید. اول از همه از سایتشان در این آدرس بازدید کنید. بسیار خوب به معرفی این پلتفرم ساخته همراه با اسناد و مثال های مختلف که شاید نیاز شما به مطالعه ادامه این متن را مرتفع کند! اما در ادامه تلاش کردم به زبانی آسوده و روندی مناسب، هم مفاهیم را مطرح کنم و هم مثال کوچکی در این زمینه بزنم.

Pixel-Perfect Multi-Platform Applications for Windows, macOS, Linux, Android, iOS, WebAssembly with C# and WinUI

جمله بالا، تیتر اول سایت Uno می باشد. عبارت Pixel Perfect به این مورد اشاره دارد که در هنگام خروجی گرفتن به هر پلتفرمی، کیفیت پیکسل ها کاهش پیدا نخواهد کرد و کاربر احساس بدی در UI پیدا نخواهد کرد.

خروجی Uno برای وب سایت، Blazor آن هم از نوع WebAssembly است. اگر با Blazor آشنا نیستید و خروجی وب سایت برای شما جذاب است، حتما تا همینجا متن را نگه داشته و بعد از مطالعه در مورد آن، برگشته و ادامه متن را مطالعه کنید!

در عنوان سایت آمده که : توسط سی شارپ و WinUI. سی شارپ که مشخص است. اما WinUI را برای کسانی که آشنایی ندارند، تعریف می کنم:

آینده ساخت نرم افزار ها و برگ برنده تکنولوژی هایی چون WinForms و WPF و UWP، استفاده از WinUI است. WinUI اکوسیستمی شامل تعداد زیاد و کاملی از کنترل هایی است که می توانید در نرم افزارهای ویندوزی از آن استفاده کنید. همچنین می توانید از این کنترل های مدرن و جامع، در پلتفرم های غیر ویندوزی مانند اندروید و iOS استفاده کنید. (مثلا با استفاده از Uno Platform). می توانید لیستی از این کنترل ها را از اینجا ببینید.

ورود به جزئیات WinUI، ما را از بحث اصلی دور می کند. اما با مثالی کوچک، استفاده از این کنترل ها را نشان می دهم.

فرض کنید در نرم افزار Uno خودمان نیاز به کنترلی برای انتخاب تاریخ داریم. می توانیم بدین شکل این کنترل را به اپلیکیشن مان اضافه کنیم:

<DatePicker x:Name=&quotbirthDatePicker&quot Header=&quotDate of birth&quot/>

خروجی این کد، تصویر زیر است:


با استفاده از پلتفرم Uno می توانید رابط کاربری خود را در XAML و با استفاده از کنترل های UWP و یا WinUI طراحی کنید. و در حالت بهینه، با معماری MVVM، رفتارها و بطور کلی Business Logic را پیاده سازی کنید. سپس اپ UWP خود را در ویژوال استودیو اجرا کنید. همه چی درست بود؟ بسیار خوب. اپ های سایر پلتفرم ها نیز آماده است! به همین سادگی!

زمان آن رسیده که با مثالی عملی، چگونگی این کار را به شما نشان دهم. برای توسعه در این پلتفرم به ویژوال استودیو 2019 نیاز داریم. دقت کنید که باید ابزارهای زیر در ویژوال استودیو نصب باشد. در غیر این صورت از منوی Tools و سپس Get tools and features اقدام به نصب این موارد کنید:

  • به ویژوال استودیو بازگشته، از منوی Extensions گزینه Manage Extensions را انتخاب کرده و برای Uno جستجو کنید. از نتایج حاصله، Uno Platform Solution Templates را انتخاب کنید:


  • پس از نصب، به صفحه ایجاد پروژه ای جدید وارد شوید و عبارت Uno را جستجو کنید. از لیست موجود، گزینه Cross Platform App (Uno Platform) را انتخاب کنید.


  • نامی برای پروژه انتخاب و آن را ایجاد کنید. همانطور که در Solution Explorer می بینید، پروژه های مختلفی برای شما ایجاد شد. وارد پروژه ای که نام YourProjectName.Shared دارد شده و MainPage.XAML را انتخاب کنید.
  • در MainPage.XAML عبارات زیر را وارد کنید:
<StackPanel Background=&quot{ThemeResource ApplicationPageBackgroundThemeBrush}&quot Margin=&quot15&quot>
<Slider x:Name=&quotslider&quot/>
<TextBlock Text=&quot{Binding ElementName=slider, Path=Value}&quot/>
</StackPanel>

ما یک اسلایدر داریم و با Binding می خواهیم که مقدار آن را در متن زیر آن نمایش دهیم.

  • حال پروژه را در حالت UWP اجرا می کنیم. خروجی زیر را می بینیم:


همین پروژه را در حالت اندروید تست می کنیم:


و همینطور در حالت وب سایت (WASM):


نتیجه گیری: با پلتفرم تازه نفس Uno آشنا شدیم و متوجه شدیم که اگر این پروژه پیشرفت کند و کامل تر از این هم بشود، تحولی شگرف در صنعت مهندسی نرم افزار رقم خواهد زد. در صورتی که سوالی برای شما پیش آمده یا به مشکلی بر خوردید حتما با من در میان بگذارید. ارادتمند شما

دات نتunoمولتی پلتفرم
C#/.NET Developer
شاید از این پست‌ها خوشتان بیاید