بررسی NET MAUI. با حرفه‌ای ها

آینده توسعه اپلیکیشن های چندسکویی موبایل با NET MAUI.با سلام خدمت دوستان.همونطور که شاید شما هم اسم NET MAUI. به گوشتون خورده باشه امروز میخوایم یک نگاه کلی بهش داشته باشیم. پارسال (2020) در کنفرانس Build مایکروسافت بود که اولین بار این اسم مطرح شد و مایکروسافت برنامه خودش رو برای این پلتفرم تشریح کرد. همونطور هم که انتظار می‌رفت، MAUI آینده ی زامارین و نسخه آپگرید شده اون معرفی شد که به توسعه دهندگان این امکان رو میده از ویژگی های محلی (native) اندروید، ios و ویندوز استفاده لازم رو بکنن و داخل برنامه هاشون به کار ببرن.همونطور که مطلع هستید مایکروسافت داره تلاش میکنه تا تمامی پلتفرم دات نت رو به صورت یکتا و منسجم در بیاره یعنی دات نت فریم ورک، دات نت کور، پروژه مونو و... به صورت واحد و مجتمع تحت عنوان یک پلتفرم واحد NET. عرضه بشه که در این راستا MAUI نقش کلیدی رو بازی میکنه. این فریمورک از طریق یک codebase واحد به توسعه دهندگان این قابلیت رو میده تا از API های محلی هر سیستم عامل مدرن استفاده کنن. همچنین روند توسعه رو از طریق یک ساختار تک لایه ای (بر خلاف زامارین که برای هر تارگت پلتفرم یک لایه جدا داشتیم) سرعت می بخشه اما همچنان این امکان وجود داره تا در صورت نیاز برای پلتفرم های مختلف کد های مختلف نوشته بشه.فریمورک NET MAUI. ساختار پروژه رو به صورت یک سورس کد واحد درمیاره تا با یک کلیک خروجی های پلتفرم های مختلف از پروژه گرفته بشه. از ویژگی های مهم NET MAUI. میشه به XAML و الگوی MVVM اشاره کرد. همچنین توسعه دهندگان می تونن از الگوی MVU (مخفف Model-View-Update) هم استفاده کنن.مایکروسافت همچنین قصد داره تا یک راهنمای Try-N-Convert ارایه کنه تا توسعه دهندگان بتونن پروژه های خودشون رو به سادگی به NET MAUI. تبدیل کنن (از زامارین مهاجرت کنن). اما مهمترین هدف NET MAUI افزایش حداکثری کارایی (Performance) و همچنین تسریع الگوریتم هاست (نکته ای که شاید مهم ترین ضعف زامارین در ابتدای کارش بود). از اهداف دیگه میشه به کامپایلر های پیشرفته و همچنین SDK های توسعه یافته اشاره کرد.در ادامه نظر سه نفر از افراد خبره در این حوزه رو بررسی می کنیم. اما اول بهتره آشنا بشیم باهاشون.آقای Gabriel Baptista: ایشون مهندس نرم افزار و Team Lead گروه های فنی مختلف در جهان هست که تجربه زیادی با محصولات مایکروسافتی داره. همچنین متخصص سرویس ابری آژور PaaS و استاد کامپیوتر هست که مقالات و مطالب زیادی نوشته. در حوزه مهندسی و توسعه و معماری نرم افزار هم آموزش های زیادی داده. به علاوه این که یکی از سخنران های مهم Channel9 (که دیگه نیازی به توضیح نداره) هم هست.آقای Francesco Abbruzzese: سازنده ی MVC Control Toolkit هستن. تقریبا از اولین نسخه ASP.NET فعال بودن و مقالات و آموزش های زیادی رو انجام دادن. همچنین داخل وبلاگ خودش و مجلات آنلاین مختلف، مقالات متنوعی از برنامه نویسی کلاینت با دات نت می نویسه.این دو همچنین مولف کتاب زیر هم هستن:آقای Valerio De Sanctis: متخصص حوزه IT و تجربه 20 ساله رهبری تیم های برنامه نویسی حوزه وب و همچنین مدیر پروژه های مبتنی بر ASP.NET و PHP و Java و جاوا اسکریپت . پوزیشن های ارشد نظیر CTO و مدیر امنیتی در شرکت های مختلف مالی و بیمه داشته. عضو فعال شبکه Stack Exchange و جامعه های StackOverFlow و ServerFault و SuperUser هستن. به علاوه دارای مدرک MVP (مخفف Microsoft Most Valuable Professional) هستن و بنیان گذار Ryadelمولف کتاب زیر هم هستن:و اما بریم سراغ بررسی این فریمورک با این دوستان:سوال اول) کدام رویکرد - توسعه اپلیکیشن های محلی (Native) یا چندسکویی (CrossPlatform) بهتر و رایج‌تر هست؟گابریل: من همیشه پیشنهادم اینه که بهترین پلتفرم اونیه که بهترین تطابق رو با تیم شما داره. مثلا، اگر شما یک تیم سی شارپی دارید، قطعا اگر انتخابتون دات نت باشه (زامارین، MAUI و ...) نتیجه بهتری خواهد داشت. از طرفی اگر تیم شما جاوا اسکریپت/ تایپ اسکریپتی هست انتخابتون میتونه ReactNative و یا آیونیک و ... باشه و همین صورت برای باقی پلتفرم ها.فرانچسکو: اساسا واژه بهتر یکم سخت هست به کار ببریم.انتخاب صحیح به شرایط و محدودیت های یک فرد و یا یک شرکت بستگی داره. اما من فکر میکنم برای بیشتر برنامه ها "کراس پلتفرم" تنها انتخاب مورد تایید هست. برنامه های موبایلی و دسکتاپ lifecycle های کوتاهی دارند و اغلب آنها بودجه های کمتری نسبت به برنامه های شرکتی سرور ها دارند. معمولا اون ها فقط یکی از چندین راهی هستن که قراره با برنامه های شرکتی یا وبسایت های پیچیده ارتباط برقرار کنن. بنابراین دو فاکتور بودجه و زمان مهمترین محدودیت هایی هستن که توسعه دادن و پشتیبانی چندین برنامه Native رو غیر عقلانی نشون میدن و تمایل شرکت ها به توسعه دادن برنامه های چندسکویی رو بیشتر می کنن. اگرچه هرچقدر هم فریمورک های چندسکویی هوشمند و بهینه باشند، برنامه های محلی (Native) همواره کارایی (Performance) بیشتری دارند و قابلیت استفاده بیشتر از ویژگی های دستگاه های موبایل دارند. بنابراین گاهی لازم است برنامه های مهم و حیاتی به صورت Native توسعه داده بشوند.والریو: هر دو رویکرد مزایا و معایب خودشونو دارن: برنامه های موبایل محلی معمولا کارایی و تجربه کاربری بهتر و بیشتری دارند اما توسعه آن ها امروزه میتونه هزینه مالی و زمانی زیادی برای شرکت ها داشته باشه چراکه نیاز هست تا تیم های مختلف برای پلتفرم های مختلف اندروید و ios و ویندوز و لینوکس استخدام بشن و سورس کد های مختلفی رو توسعه بدهند. کراس پلتفرم ها این معایب رو پوشش میدهند اما نکته ای که وجود داره این هست که هرچقدر شما در هزینه مالی و زمانی مزیت به دست می آورید در مقابل باید از کارایی و کارکرد های محلی دستگاه ها چشم پوشی کنید.سوال دوم) تفاوت های اصلی میان MAUI و پلتفرم Uno چیست؟گابریل: من میگویم با توجه به این که MAUI از Xamarin.Forms بهره می گیرد، به سادگی می تواند با سیستم عامل های مختلف سازگار شود.فرانچسکو: گزینه پیشفرض uno یکسان نمایش دادن (style) اپلیکیشن در تمامی پلتفرم ها است، اما این فرصت را هم ایجاد می کند تا اپلیکیشن ها شبیه اپلیکیشن های محلی به نظر برسند درصورتی که MAUI استفاده بیشتری از این فرصت میکند و از ویژگی های محلی (Native) پلتفرم ها بهره بیشتری می برد. به عبارت ساده تر، اپلیکیشن های توسعه داده شده با MAUI بیشتر شبیه اپلیکیشن های محلی هستند تا Uno. البته Uno تارگت WASM هم دارد در حالیکه MAUI این تارگت را فعلا پشتیبانی نمی کند. گرچه می توان از Blazor برای این هدف استفاده کرد.والریو: هر دو پلتفرم MAUI و Uno سعی میکنند تا به یک هدف برسند، اما هر یک مبتنی بر یک ساختار معماری متفاوت هستند. MAUI، به مانند زامارین فرم لایه انتزاعی خودش را بالای API های محلی دارد در حالیکه Uno اینترفیس های UWP را بر روی آن ها میسازد. دوباره، هر دو رویکرد مزایا و معایب خودشان را دارند: لایه های انتزاعی (abstraction layers) می تواند کارایی را پایین آورد(مخصوصا دستگاه های موبایل چرا که لازم است بیشتر تسک های layout-related را برعهده گیرد) اما این رویکرد به دلیل نگه داشتن یک codebase کوچک و همه منظوره مفید خواهد بود.سوال سوم) آیا MAUI می تواند در همان ابتدای کار نیاز های توسعه اپلیکیشن های چندسکویی را برآورده کند، یا لازم است تا چندین ریلیز آتی مختلف منتشر شود تا به این هدف برسد؟گابریل: مکانیزم ارائه شده در این نوع فناوری به ما امکان می دهد حتی در مواردی که تفاوت وجود دارد ، بسترهای مختلف را تضمین کنیم. بنابراین ، پاسخ من مثبت است.فرانچسکو: با توجه به سابقه مایکروسافت و پلتفرم های آن، من می گویم بعید هست که MAUI در ابتدای کار بتواند تمام نیاز های توسعه اپلیکیشن های چندسکویی را برآورده کند. ممکن است تا 80، 90 درصد موثر باشد. اما به نظرم برای این که MAUI بتواند تمامی نیاز های این حوزه را برطرف کند 1 سال دیگر نیاز دارد.والریو: امیدوارم! واقع بینانه بخواهم بگویم، من فکر میکنم این یک کار بسیار سخت است. من از ابتدا انتظار سازگاری خوب برنامه بین پلتفرم ها را ندارم ، به ویژه در مورد UI/UX. چنین تحولات بزرگی به تدریج با بازخورد دقیق و مرتبط که از کاربران واقعی و جامعه می آید ، کامل می شود.سوال چهارم) چقدر زمان می برد تا مایکروسافت MAUI را انتشار نهایی دهد؟گابریل: مایکروسافت به طور مداوم نسخه های محیط نرم افزاری خود را منتشر می‌کند. این سوال کمی پیچیده تر است زیرا شما به عنوان یک توسعه دهنده نرم افزار نمی توانید به این فکر کنید که مایکروسافت چه زمانی MAUI را منتشر خواهد کرد.باید در نظر بگیرید که چه زمانی نسخه پایدار منتشر خواهد شد و نسخه LTS در دسترس قرار می‌گیرد. من معتقدم که این کار کمی بیشتر از نقشه راه ارائه شده توسط مایکروسافت طول خواهد کشید.فرانچسکو: با توجه به جدول زمانی برنامه ریزی شده ، MAUI باید همراه با انتشار NET 6. در نوامبر 2021 منتشر شود. باید به این جدول زمانی احترام گذاشت ، اما در بدترین حالت ، نسخه پایدار چند ماه بعد منتشر می‌شود.والریو: زمان بندی رسمی MAUI خوش بینانه به نظر می رسد ، اما به نظر می رسد که مایکروسافت در این پروژه سرمایه گذاری زیادی کرده است و آنها قبلاً موفق شده اند بدون تأخیر بیش از حد نسخه های بزرگ را با موفقیت ارائه دهند (به .NET 5 فکر کنید): من فکر می کنم آنها تمام تلاش خود را برای انتشار MAUI خواهند کرد تا همراه با اولین نسخه نهایی NET 6. عرضه شود ، زیرا از نظر بازاریابی ایده آل خواهد بود و می تواند به جذب برخی شرکت هایی که تازه می خواهند شروع کنند کمک کند.خلاصهانتشار MAUI بدون شک انقلابی در نحوه توسعه برنامه های کاربردی دستگاه ها توسط توسعه دهندگان ایجاد خواهد کرد.توسعه دهندگان می توانند به دنبال استقرار سریع و ساده باشند و اینکه آیا MAUI پروژه های مخصوص پلتفرم را ارائه می دهد یا یک سیستم کد مشترک، در نهایت مشخص می شود که چگونه است. برای تخمین میزان تأثیر MAUI خیلی زود است ، اما مطمئناً ارزش انتظار را خواهد داشت و در حال حاضر با اضافه شدن MAUI به Github دات نت، هیجان زیادی وجود دارد که ببینیم MAUI چگونه در سیستم عامل های توسعه ظاهر می شود و چگونه انجمن ها و جوامع برنامه نویسی آن را می پذیرند و با آن همسو می شوند. با هر پیش نمایش .NET 6 می توان انتظار افزودنیهای متعدد به قابلیت های .NET MAUI را داشت. هم اکنون، توسعه دهندگان منتظر تجربه "dotnet new":) هستند.منبع:Exploring the new .NET Multi-Platform App UI (MAUI) with the Experts | Packt Hub (packtpub.com) https://youtu.be/XMqkthjnv5o