Blog (220)
Komentarze (4k)
Recenzje (1)

Comet - MVU w MAUI bez XAML, czyli próba dogonienia Fluttera

@djfoxerComet - MVU w MAUI bez XAML, czyli próba dogonienia Fluttera30.10.2022 21:37

MAUI jest już z nami od kilku miesięcy i jest bardzo mocno promowane przez Microsoft. Jest to niezmiernie ciekawa opcja do pisania aplikacji pod różne systemy i środowiska. O ile jednak w przypadku pisania aplikacji desktopowych czy webowych, taki MAUI jest ciekawostką dla deweloperów .NET, to w przypadku świata mobilnego jest zupełnie inaczej.

Rok temu w listopadzie 2021 pisałem o tym jak tworzenie mobilnych aplikacji w .NET jest nie lada wyzwaniem. Oficjalne zakończenie wsparcia dla Xamarin.Forms i przedstawienie alternatywy w postaci MAUI, które w 2021 roku nie doczekało się premiery, powodowało ból głowy mobilnych deweloperów .NET. Mimo, iż w maju 2022 roku MAUI miało oficjalną premierę, to nadal sytuacja nie jest wcale lepsza. 

Samo MAUI nie jest jeszcze narzędziem, które można uznać w 100% gotowe na to, aby pójść z nim na produkcję. Wiele jeszcze mniejszych niedoróbek i problemów spędza sen z powiek deweloperów mobilnych w .NET. Mimo, że dostaliśmy wersję finalną, nie jest to wersja, która pozwoli na bezproblemowe działanie aplikacji biznesowych. Szczególnie jest to niekomfortowe, gdy chcąc pisać mobilne aplikacje w .NET, nie mamy alternatywy. Ale problemem jest również to, że MAUI nadal siedzi głęboko w roku 2008...

XAML - archaizm będący hamulcem MAUI

miało mogę powiedzieć, że dla MAUI ciężko coś zarzucić (abstrahując już od problemów wieku dziecięcego). Świetne podstawy w założeniach, duże zaangażowanie Microsoftu i spory udział społeczności. Jest tylko jedno "ale" i to dość duże - XAML.

XAML miał premierę dawno temu w okolicach powstania WPF / WF. Przez ten czas był ściśle związany z tworzeniem UI i stał się w pewnych kręgach wymarzonym "produktem" do tworzenia interfejsu. WPF (niech żyje na wieki) czy nowy WinUI 3 (rozkręca się) opierają się na XAML i nikt go tam nie piętnuje. Ale XAML to też technologie, zapomniane i słusznie wymarłe jak Silverlight, Windows Phone czy UWA, a teraz i Xamarin. Przez te lata świat się zmieniał, a XAML jak był ociężały i przegadany tak i nadal jest.

Będąc ostatnio na .NET Developer Days jedna z głównych prezentacji związana była właśnie z MAUI. A że można było tam zadawać pytania przez mobilną apkę, zerknąłem o co uczestnicy konferencji najczęściej pytają. I nie uwierzycie. Tak. "Dlaczego w MAUI nadal jest XAML?". Cóż, zatem nie tylko ja mam dość ambiwalentne podejście do MAUI właśnie przez ponownie użycie XAML, które wg mnie, w większych aplikacjach zupełnie nie sprawdzało się w Xamarinie (Forms). Widoki mobilne w XAML są nad wyraz opasłe i w połączeniu z MVVM tworzą dziwną hybrydę lekkości z przesadnie sformalizowaną składnią opartą na XML.

Szczególnie widać "klocowatość" języka XAML, gdy wychylimy się trochę poza nasz .NETowy grajdołek. A tu, od kilku lat, w mobilce rozpycha się z niemałym sukcesem...

Flutter

Mobilny framework od Google pozwala na pisanie szybkich i łatwych w utrzymaniu aplikacji. Wykorzystując wzorzec MVU tworzone aplikacje nie są rozdmuchane w kodzie i w widokach, niczym w klasycznym podejściu Xamarinowym (Forms) z wielkimi XAMLami. Tutaj w kodzie Dartowym (języku odratowanym z zapomnienia) tworzymy widoki, co jest o wiele prostsze i łatwiejsze w tworzeniu, a także utrzymaniu.

Na szczęście jest światełko w tunelu.

Comet - MVU dla MAUI

Po wspomnianej już wcześniej prezentacji o MAUI podszedłem do prelegenta (James Montemagno) z pytaniem dlaczego znowu XAML i czy będzie coś w zamian. I tu usłyszałem, że XAML było po prostu najłatwiej i najszybciej wrzucić do MAUI. Nie da się ukryć tego, ale dodał też że Microsoft patrzy z ciekawością na projekt Comet, a który już wcześniej poznałem.

Jest to oddolna inicjatywa stworzona przez społeczność, która chce aby MAUI był faktycznie nowoczesną platformą do tworzenia wieloplatformowych aplikacji. Pakiet dodaje do MAUI możliwość tworzenia aplikacji w oparciu o MVU (Model - View - Update), wyrzucając potrzebę grzebania się w XAML.

Tworzenie aplikacji w ten sposób jest niezmiernie proste i przejrzyste (i bardzo zbliżone do tego co oferuje Flutter). Klasyczny "Hello World" z licznikiem kliknięć na przycisk może wyglądać tak: 

public class MyPage : View {

    readonly State<int> clickCount = 1;
    readonly State<string> text = "Hello World";

    public MyPage() {
        Body = () => new VStack {
            new Text (text),
            new Button("Update Text", () => state.Text = 
               $"Click Count: {clickCount.Value++}")
        };
    }
}

W tym przypadku naszym View jest ekran zaś Model to obiekty State, a Update robiony jest przez Comet. To samo możemy zrobić jeszcze inaczej, poprzez atrybuty:

 public class MyPage : View {

    [State]
    readonly HelloWorldModel hello = new
    {
        Text = "Hello World"
    };

    [Body]
    View body()
        => new VStack {
            new Text (() => hello.Text),
            new Button("Update Text", () => hello.Text = 
               $"Click Count: {hello.Value++}")
        };
    public class HelloWorldModel: BindingObject
    {
        public int Value
        {
            get => GetProperty<int>();
            set => SetProperty(value);
        }

        public string Text
        {
            get => GetProperty<string>();
            set => SetProperty(value);
        }
    }
}

Repozytorium jest dostępne oczywiście na GitHube: https://github.com/dotnet/Comet.

Początki projektu sięgają roku 2019 i obecnie repozytorium znajduje się w domenie Microsoftowej "dotnet". Głównym deweloperem jest James Clancey. Do niedawna był on pracownikiem Microsoftu, ale w czerwcu tego roku rzucił giganta z Redomond i rozpoczął prace w Meta od Fecbooka. 

Od razu warto wziąć pod uwagę, że mimo zainteresowania Cometem ze strony Microsoftu, jest to nadal projekt, który jest tylko podglądową paczką jako PoC. Mimo tego, posiada on HotReload i pełne wsparcie dla debugowania. Społeczność bardzo szybko zainteresowała się Cometem. W sieci znajdziemy wiele wpisów blogowych i poradników na YouTubie odnośnie tego projektu.

Comet aż się prosi o to, aby Microsoft oficjalnie wziął pod swoje skrzydła ten projekt i rozpoczął wreszcie prace nad MVU w MAUI. XAML jest ciekawy, ale konkurencja w postaci Fluttera odskoczyła bardzo daleko. Tak bardzo, że pudrowanie MAUI poprzez XAML mocno nadwyręża społeczność deweloperów, którzy oczekują po następcy Xamarin.Forms faktycznie bycia platformową nowoczesną, a nie tkwiącą jeszcze w zamierzchłych czasach Silverlighta i Windows Phone. Liczę, że faktycznie Comet (albo jego odpowiednik od Microsoftu) będzie w stanie dostarczyć swobodę MVU od Fluttera w projektach MAUI. Czego życzę sobie i Wam.

(Wpis na blog.djfoxer.pl)

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.