В чем разница между MAUI и Uno Platform?
Я немного запутался. Может ли кто-нибудь точно объяснить, в чем разница между ними? Когда мы должны использовать MAUI, а когда UNO? Как я понял, обе могут работать на разных платформах, так в чем же причина одновременного внедрения двух разных технологий? Могут ли они работать в Windows 7? Или они ограничены только Windows 10? Может ли моя программа WPF работать в Linux с этими двумя технологиями?
4 ответа
Я занимаюсь разработкой с помощью Xamarin.Forms (который будет переименован в MAUI) более 5 лет, а с Uno Platform скоро будет четыре месяца. Есть ряд отличий, которые, на мой взгляд, стоили потраченного времени на переход с Xamarin.Forms на Uno. Во-первых, сходства:
- Оба являются кроссплатформенными фреймворками C #.
- Оба имеют поддержку XAML
- Оба поддерживают iOS, Android, универсальную платформу Windows и (в меньшей степени) Mac OS через платформы Xamarin, отличные от .Forms.
- Xamarin.Essentials работает как с Xamarin, так и с Uno на указанных выше платформах.
- Также нет встроенной поддержки печати, создания PDF или PNG.
Теперь отличия:
- Архитектурно Xamarin.Forms представляет собой собственный уровень абстракции над собственными API-интерфейсами, тогда как Uno создает интерфейсы UWP на основе собственных API-интерфейсов. На мой взгляд, это самая важная разница по трем причинам:
- В Android абстракция Xamarin.Forms включает управление измерениями и макетом. Это ОЧЕНЬ ДОРОГО и приводит к очень низкой производительности для всех видов списков, кроме самых простых. Uno, напротив, выполняет это на собственном уровне - таким образом, избегая значительных перемещений между Java и C #.
- В WASM Xamarin выполняет рендеринг через Blazor, что позволяет создавать гибридные серверно-клиентские приложения. К сожалению, это добавляет сложности по сравнению с подходом, принятым Uno. Еще неизвестно, имеет ли подход Xamarin снижение производительности.
- Поскольку Uno строит UWP на собственных фреймворках пользовательского интерфейса, довольно просто открывать крышки и вносить глубокие изменения в функции. В Xamarin.Forms это сделать намного сложнее (а в некоторых случаях и невозможно).
- Uno имеет сильную поддержку WPF (так что да, он может работать в Windows 7), Tizen и Linux (GTK).
- Uno поддерживает сложный UWP XAML, который, если у вас есть опыт работы с WPF или UWP, имеет несколько основных преимуществ. В противном случае это будет потеряно для вас, как это было для меня. Я надеюсь это изменить.
- Uno поддерживает библиотеки WinUI и Windows Community Toolkit.
- Хотя я не могу быть в этом уверен, я считаю, что Xamarin.Forms существует примерно на 2-3 года дольше, чем Uno Platform. При этом Uno быстро догнала Xamarin по функциям и качеству кода. Я считаю, что это отчасти из-за того, что UWP является очень зрелой операционной спецификацией.
- По моему опыту переноса проекта из ~132 тыс. Строк кода Xamarin.Forms в Uno, Uno был значительно менее подробным - ~65 тыс. Строк. Почти все это сокращение произошло в строках кода пользовательского интерфейса (модели, модели представления и бизнес-логика остались почти нетронутыми). Во многом это было связано с тем, насколько разнообразными могут быть элементы управления UWP (Uno).
Наконец, вы спросили, может ли ваша программа WPF работать в Linux с этими двумя технологиями. Ответ
- Xamarin.Forms: Нет. Linux не поддерживается;
- Платформа Uno: Нет, но можно перенести ваш код. Усилия будут примерно такими же, как при переносе вашей программы из WPF в UWP.
Ваш пробег может отличаться. Однако, если у вас есть опыт работы с WPF или UWP, я настоятельно рекомендую Uno. Если у вас нет опыта ни с одним из них, я бы порекомендовал Uno из-за превосходной производительности с Android.
Другая точка зрения состоит в том, что на данный момент вы можете сравнивать UNO только с тем, что Xamarin.Forms делает СЕГОДНЯ. Если вы являетесь членом команды MAUI, то вам следует осветить путь, а я нет. Вы действительно не знаете, какие структурные изменения были внесены для повышения производительности, и в последнее время Microsoft уделяет большое внимание производительности, поэтому я предполагаю, что они наверняка будут усердно работать над разделением Java/C#.
Также следует учитывать, что MAUI - это API Microsoft, а UNO - нет (прямо сейчас). Ву знает, что в будущем Microsoft будет покупать технологии, которые им нравятся и которые соответствуют их видению.
ЕСЛИ вам сейчас нужна кроссплатформенная разработка, вы сравниваете UNO, доступный прямо сейчас, и Xamarin.Forms. MAUI объявлен на 2021 год, если он не будет отложен.
Теперь, чтобы ответить на ваш настоящий вопрос: вы можете запустить WPF сегодня на Linux с помощью .NET Core, вам не нужно ждать MAUI или выходить из Microsoft API.
Команда Uno также рассмотрела этот вопрос в документации - https://platform.uno/docs/articles/intro.html#how-is-uno-platform-different-from-net-maui
Приложения Uno Platform являются кроссплатформенными, работают как в Интернете, так и на мобильных и настольных компьютерах, в равной степени, из единой кодовой базы. Blazor - это функция ASP.NET, предназначенная в первую очередь для создания веб-приложений.
Приложения Uno Platform написаны на C# и разметке XAML, тогда как приложения Blazor написаны с использованием синтаксиса Razor, гибрид HTML / CSS и C#.
Uno Platform и Blazor используют поддержку .NET WebAssembly для работы в браузере.
WinUI не поддерживает выполнение кода XAML+ в браузере; интеграция WASM для Microsoft означает, что WebView WinUI может выполнять в нем компонент blazor. Итак, если вы хотите иметь графический компонент, который можно использовать в браузере (как настоящее веб-приложение, использующее wasm) и на любой платформе (windows/mac/Android/IOS) как классическое настольное приложение, вы должны определить его как HTML, а не XAML. Уно разрешает.