Tipy pro výkon MVVM pro aplikace WinUI

Toto téma popisuje některé aspekty výkonu pro aplikace WinUI související s MVVM, vazbami a zobrazením složení.

Model-View-ViewModel (MVVM)

V mnoha aplikacích WinUI je běžný vzor Model-View-ViewModel (MVVM). (MVVM je velmi podobný Fowlerovu popisu modelu Model-View-Presenter, ale je přizpůsobený pro XAML). Problém se vzorem MVVM je, že může neúmyslně vést k aplikacím, které mají příliš mnoho vrstev a příliš mnoho přidělení. Motivace pro MVVM jsou tyto.

  • Oddělení obav. Vždy je užitečné rozdělit problém na menší části a model, jako je MVVM nebo MVC, je způsob rozdělení aplikace (nebo dokonce jednoho ovládacího prvku) na menší části: skutečné zobrazení, logický model zobrazení (model) a logiku aplikace nezávislé na zobrazení (model). Zejména je oblíbeným pracovním postupem, když návrháři spravují zobrazení pomocí jednoho nástroje, vývojáři spravují model pomocí jiného nástroje, a integrátoři návrhu spravují view-model pomocí obou nástrojů.
  • Testování jednotek Model zobrazení (a tím pádem i model) můžete jednotkově testovat nezávisle na pohledu, takže se nespoléháte na vytváření oken, řízení vstupu atd. Když zobrazení necháte malé, můžete otestovat velkou část aplikace, aniž byste museli vytvářet okno.
  • Schopnost rychlé reakce na změny uživatelského zážitku. Zobrazení obvykle vidí nejčastější změny a nejnovější změny, protože uživatelské prostředí je upraveno na základě zpětné vazby koncového uživatele. Když zobrazení necháte oddělené, dají se tyto změny přizpůsobit rychleji a s menší četností změn v aplikaci.

Existuje několik konkrétních definic modelu MVVM a rozhraní třetích stran, které ho pomáhají implementovat. Striktní dodržování libovolné varianty vzoru ale může vést k aplikacím s mnohem větší režií, než je možné zdůvodnit.

  • Datová vazba XAML (rozšíření značek {Binding}) byla navržena částečně tak, aby umožňovala vzory model/zobrazení. {Binding} ale přináší nevýkonnou pracovní sadu a režii procesoru. Vytvoření {Binding} způsobí řadu přidělení a aktualizace cíle vazby může způsobit reflexi a boxování. Ve WinUI se tyto problémy řeší rozšířením značek {x:Bind}, které kompiluje vazby v době sestavení a běžně se používá v ukázkách WinUI a v produkčních aplikacích. Doporučení: Použijte {x:Bind}.
  • V MVVM je oblíbené připojit událost Button.Click k modelu pohledu pomocí rozhraní ICommand, jako jsou běžné pomocné třídy DelegateCommand nebo RelayCommand. Tyto příkazy představují dodatečná přidělení, včetně posluchače události CanExecuteChanged, zvyšují pracovní sadu a prodlužují dobu spuštění a navigace stránky. Doporučení: Jako alternativu k použití vhodného rozhraní ICommand zvažte vložení obslužných rutin událostí do kódu na pozadí, jejich připojení k událostem zobrazení a volání příkazu v modelu zobrazení při vyvolání těchto událostí. Budete také muset přidat další kód, který tlačítko zakáže, když je příkaz nedostupný.
  • V MVVM je oblíbené vytvořit stránku se všemi možnými konfiguracemi uživatelského rozhraní a potom sbalit části stromu vazbou vlastnosti Viditelnost na vlastnosti virtuálního počítače. To zbytečně přidává čas spuštění a možná do pracovní sady (protože některé části stromu se nemusí nikdy zobrazit). Doporučení: Pomocí funkce atributu x:Load odložte nepotřebné části stromu mimo spuštění. Vytvořte také samostatné uživatelské ovládací prvky pro různé režimy stránky a použijte kód na pozadí, aby byly načteny pouze potřebné ovládací prvky.