Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit onderwerp worden enkele prestatieoverwegingen besproken voor WinUI-apps met betrekking tot MVVM, bindingen en weergavesamenstelling.
Het MVVM-patroon (Model-View-ViewModel)
Het MVVM-patroon (Model-View-ViewModel) is gebruikelijk in veel WinUI-apps. (MVVM is zeer vergelijkbaar met Fowler's beschrijving van het Model-View-Presenter-patroon, maar het is afgestemd op XAML). Het probleem met het MVVM-patroon is dat het per ongeluk kan leiden tot apps met te veel lagen en te veel toewijzingen. De motivaties voor MVVM zijn deze.
- Scheiding van verantwoordelijkheden. Het is altijd handig om een probleem op te delen in kleinere delen, en een patroon zoals MVVM of MVC is een manier om een app (of zelfs één besturingselement) te verdelen in kleinere delen: de werkelijke weergave, een logisch model van de weergave (view-model) en de logica van de weergave-onafhankelijke app (het model). Het is met name een populaire werkstroom om ontwerpers eigenaar te laten zijn van de weergave met één hulpprogramma, ontwikkelaars zijn eigenaar van het model met een ander hulpprogramma en ontwerpintegrators zijn eigenaar van het weergavemodel met beide hulpprogramma's.
- Eenheidstests. U kunt het weergavemodel (en dus het model) onafhankelijk van de weergave testen, waardoor u niet afhankelijk bent van het maken van vensters, het besturen van invoer, enzovoort. Door de weergave klein te houden, kunt u een groot deel van uw app testen zonder dat u ooit een venster hoeft te maken.
- Flexibiliteit voor wijzigingen in de gebruikerservaring. De weergave ziet meestal de meest voorkomende wijzigingen en de meest late wijzigingen, omdat de gebruikerservaring wordt aangepast op basis van feedback van eindgebruikers. Door de weergave gescheiden te houden, kunnen deze wijzigingen sneller en met minder verloop naar de app worden aangepast.
Er zijn meerdere concrete definities van het MVVM-patroon en frameworks van derden die helpen deze te implementeren. Maar strikte naleving van elke variatie van het patroon kan leiden tot apps met veel meer overhead dan gerechtvaardigd kan worden.
- XAML-gegevensbinding (de markeringsextensie {Binding} is gedeeltelijk ontworpen om model-/weergavepatronen mogelijk te maken. Maar {Binding} brengt een niet-triviale werkset en CPU-overhead met zich mee. Het maken van een {Binding} veroorzaakt een reeks allocaties en het bijwerken van een bindingsdoel kan reflectie en boxing veroorzaken. In WinUI worden deze problemen opgelost met de markeringsextensie {x:Bind}, die bindingen compileert tijdens de build en veel wordt gebruikt in WinUI-voorbeelden en productie-apps. Aanbeveling: gebruik {x:Bind}.
- Het is populair in MVVM om Button.Click te verbinden met het weergavemodel met behulp van een ICommand, zoals de veelgebruikte helpers DelegateCommand of RelayCommand. Deze opdrachten zijn echter extra toewijzingen, waaronder de CanExecuteChanged-gebeurtenislistener, toevoegen aan de werkset en toevoegen aan de opstart- en navigatietijd voor de pagina. Aanbeveling: Als alternatief voor het gebruik van de handige ICommand-interface kunt u gebeurtenis-handlers in uw code plaatsen, deze koppelen aan de weergavegebeurtenissen en een opdracht aanroepen in uw weergavemodel wanneer deze gebeurtenissen worden gegenereerd. U moet ook extra code toevoegen om de knop uit te schakelen wanneer de opdracht niet beschikbaar is.
- Het is populair in MVVM om een pagina te maken met alle mogelijke configuraties van de gebruikersinterface en vervolgens delen van de structuur samen te vouwen door de eigenschap Zichtbaarheid te binden aan eigenschappen in de VIRTUELE machine. Dit voegt onnodig extra tijd toe aan de opstarttijd en mogelijk aan het werkgeheugen, aangezien sommige delen van de boomstructuur mogelijk nooit zichtbaar zullen zijn. Aanbevelingen: Gebruik de functie x:Load attribute om onnodige delen van de structuur uit te stellen bij het opstarten. Maak ook afzonderlijke gebruikersbesturingselementen voor de verschillende modi van de pagina en gebruik code-behind om alleen de benodigde besturingselementen geladen te houden.
Windows developer