WinUI uygulamaları için MVVM performans ipuçları

Bu konu başlığında MVVM, bağlamalar ve görünüm oluşturma ile ilgili WinUI uygulamaları için bazı performans konuları ele alınmaktadır.

Model-View-ViewModel (MVVM) deseni

Model-View-ViewModel (MVVM) deseni birçok WinUI uygulamasında yaygındır. (MVVM, Fowler'ın Model-View-Presenter deseninin açıklamasına çok benzer, ancak XAML'ye uyarlanmıştır). MVVM düzeniyle ilgili sorun, yanlışlıkla çok fazla katmana ve çok fazla ayırmaya sahip uygulamalara yol açabilmesidir. MVVM'nin motivasyonları şunlardır.

  • Sorumlulukların ayrılması. Bir sorunu daha küçük parçalara bölmek her zaman yararlıdır ve MVVM veya MVC gibi bir desen, bir uygulamayı (hatta tek bir denetimi) daha küçük parçalara bölmenin bir yoludur: gerçek görünüm, görünümün mantıksal modeli (görünüm modeli) ve görünümden bağımsız uygulama mantığı (model). Özellikle tasarımcıların bir aracı kullanarak görünüme sahip olması, geliştiricilerin başka bir araç kullanarak modelin sahibi olması ve her iki aracı kullanarak tasarım tümleştiricilerinin görünüm modelinin sahibi olması popüler bir iş akışıdır.
  • Birim testi. Görünüm modelini (ve dolayısıyla modeli), görünümden bağımsız olarak birim testi yapabilirsiniz, böylece pencere oluşturmaya, giriş yönlendirmeye vb. bağımlı kalmazsınız. Görünümü küçük tutarak, pencere oluşturmak zorunda kalmadan uygulamanızın büyük bir bölümünü test edebilirsiniz.
  • Kullanıcı deneyimi değişikliklerine çeviklik. Kullanıcı deneyimi son kullanıcı geri bildirimlerine göre değiştirildiğinden görünüm en sık yapılan değişiklikleri ve en geç değişiklikleri görme eğilimindedir. Görünümü ayrı tutarak, bu değişiklikler uygulamaya daha hızlı ve daha az yeniden yapılanmayla uyarlanabilir.

MVVM deseninin birden çok somut tanımı ve uygulanmasına yardımcı olan üçüncü taraf çerçeveler vardır. Ancak desenin herhangi bir çeşidine sıkı sıkıya bağlı kalmak, gerekçelendirilebilecekten çok daha fazla ek yüke sahip uygulamalara yol açabilir.

  • XAML veri bağlaması ({Binding} işaretleme uzantısı), model/görünüm desenlerini etkinleştirmek için kısmen tasarlanmıştır. Ancak {Binding}, kayda değer bir çalışma kümesi ve CPU ek yükü oluşturur. {Binding} oluşturmak bir dizi ayırmaya neden olur ve bağlama hedefinin güncelleştirilmesi yansımaya ve kutulamalara neden olabilir. WinUI'de bu sorunlar derleme zamanında bağlamaları derleyen ve WinUI örneklerinde ve üretim uygulamalarında yaygın olarak kullanılan {x:Bind} işaretleme uzantısıyla giderilir. Öneri: {x:Bind} kullanın.
  • MVVM'de, DelegateCommand veya RelayCommand gibi bir ICommand kullanarak Button.Click olayını görünümmodeline bağlamak popülerdir. Bu komutlar, CanExecuteChanged olay dinleyicisini, çalışma kümesine eklemeyi ve sayfanın başlangıç/gezinti süresine eklemeyi içeren ek ayırmalardır. Öneri: Kullanışlı ICommand arabirimini kullanmaya alternatif olarak, olay işleyicilerini arka planınıza yerleştirmeyi, bunları görünüm olaylarına eklemeyi ve bu olaylar tetiklendiğinde görünüm modelinizde bir komut çağırmayı düşünün. Ayrıca, komut kullanılamadığında Düğme'yi devre dışı bırakmak için ek kod eklemeniz gerekir.
  • MVVM'de kullanıcı arabiriminin tüm olası yapılandırmalarına sahip bir Sayfa oluşturmak ve ardından Görünürlük özelliğini VM'deki özelliklere bağlayarak ağacın bölümlerini daraltmak popülerdir. Bu, başlangıç zamanına ve muhtemelen çalışma belleğine gereksiz yere ek yük oluşturur (çünkü ağacın bazı bölümleri hiçbir zaman görünür olmayabilir). Öneri: Ağacın gereksiz bölümlerini başlangıç dışında ertelemek için x:Load özniteliği özelliğini kullanın. Ayrıca, sayfanın farklı modları için ayrı kullanıcı denetimleri oluşturun ve yalnızca gerekli denetimlerin yüklü kalmasını sağlamak için arka planda kod kullanın.