Adatkötés, függőséginjektálás és egységtesztelés a WinUI-ban

Ez az oktatóanyag-sorozat bemutatja, hogyan implementálhat adatkötést, függőséginjektálást és egységtesztelést a Model-View-ViewModel (MVVM) tervezési mintával és az MVVM Toolkittel egy WinUI-alkalmazásban. A WinUI 3 jegyzetalkalmazás készítése oktatóanyagra épül, és bemutatja, hogyan frissítheti nézetmodelljeit az MVVM Toolkitet használva, valamint ismerteti az MVVM Toolkit és a hagyományos MVVM-megközelítések közötti különbségeket.

Az oktatóanyag kódját a GitHub-adattárból töltheti le vagy tekintheti meg.

Ebben az oktatóanyagban a következőket sajátíthatja el:

  • Ismerje meg az MVVM-eszközkészlet és a hagyományos MVVM-megközelítések közötti különbségeket.
  • Hozzon létre egy külön osztálytárprojektet a ViewModels és a szolgáltatások tárolásához a jobb tesztelhetőség érdekében.
  • Implementálja az adatkötést a WinUI-alkalmazásban az MVVM Eszközkészlettel.
  • A AllNotesViewModel és NoteViewModel megjelenítési modellek hozzáadása az MVVM-eszközkészlet kihasználásához.
  • Integrálja a függőséginjektálást a ViewModels és a szolgáltatások kezeléséhez.
  • Hozzon létre egy egységtesztelési projektet a ViewModels és a szolgáltatások teszteléséhez.

Előfeltételek

Az oktatóanyag teljesítéséhez a következő előfeltételekre lesz szüksége:

Mi az MVVM-eszközkészlet?

Az MVVM eszközkészlet egy modern, könnyű és gyors kódtár, amely segít implementálni az MVVM tervezési mintáját a .NET-alkalmazásokban. Ez a .NET közösségi eszközkészlet része, és olyan eszközöket és segédprogramokat biztosít, amelyek leegyszerűsítik az MVVM-alapú alkalmazások fejlesztését. Az MVVM eszközkészlet olyan funkciókat tartalmaz, mint például:

  • ObservableObject: Egy alaposztály, amely implementálja az INotifyPropertyChanged interfészt, így olyan nézetmodelleket hozhat létre, amelyek értesítik a tulajdonságváltozások nézetét.
  • RelayCommand: Parancs implementáció, amellyel felhasználói felületi műveleteket köthet a nézetmodell metódusaihoz.
  • Messenger: Egy üzenetkezelő rendszer, amely szoros összekapcsolás nélkül teszi lehetővé az alkalmazás különböző részei közötti kommunikációt.
  • Attribútumok: Olyan attribútumok készlete, amelyekkel sablonkódot hozhat létre, például tulajdonságmódosítási értesítéseket és parancs implementációkat.
  • Forrásgenerátorok: Fordítási idejű kódgenerálás, amely csökkenti a sablonkódot és javítja a teljesítményt.
  • Függőséginjektálás támogatása: A függőséginjektálás beépített támogatása a nézetmodellek és szolgáltatások életciklusának kezeléséhez.

Az MVVM eszközkészletet úgy tervezték, hogy könnyen használható legyen, és integrálható legyen a meglévő projektjeibe. Kompatibilis a különböző .NET-platformokkal, beleértve a WinUI-t, a WPF-et és a .NET MAUI-t. Néhány mintaalkalmazást a GitHub-adattárban vagy a Microsoft Store mintaalkalmazásában tekinthet meg, hogy az MVVM-eszközkészlet hogyan használható különböző helyzetekben.

Hogyan hasonlítja össze az MVVM-eszközkészlet a hagyományos MVVM-megközelítéseket?

Az MVVM-eszközkészlet csökkenti a Sablon ViewModel-kód mennyiségét, és leegyszerűsíti az MVVM tervezési minta implementálásának számos aspektusát a hagyományos megközelítésekhez képest. Íme néhány lényeges különbség:

Tulajdonság Hagyományos MVVM-megközelítés MVVM Toolkit megközelítés
Tulajdonságmódosítási értesítés Manuálisan implementáljon INotifyPropertyChanged egy alaposztályt, és eseményeket emeljen ki PropertyChanged az egyes tulajdonságokhoz. Örököljön a(z) ObservableObject osztályból, és használja a SetProperty metódust a(z) PropertyChanged események automatikus kiváltásához.
Parancs implementálása Manuálisan implementáljuk ICommand az egyes parancsokat. A RelayCommand segítségével egyszerűen hozhat létre parancsokat minimális sablonnal.
Messaging Egyéni üzenetkezelési rendszerek implementálása vagy külső kódtárak használata. Használja a beépített osztályt Messenger az összetevők közötti leválasztott kommunikációhoz.
Boilerplate-kód Ismétlődő kód írása a tulajdonságmódosítási értesítésekhez és a parancs implementációihoz. Attribútumok és forrásgenerátorok használata a sablonkód csökkentéséhez.
Performance A tükrözés és a futtatókörnyezeti kódgenerálás miatt előfordulhat, hogy a teljesítmény többletterheléssel jár. A forrásgenerátorok fordítási idejű kódgenerálást biztosítanak, ami javítja a teljesítményt.
Függőséginjektálás támogatása A nézetmodellek életciklusának manuális beállítását és kezelését igényli. A függőséginjektálás beépített támogatása a nézetmodellek életciklusának kezeléséhez.
Tanulási görbe Előfordulhat, hogy az MVVM fogalmainak és mintáinak mélyebb megértésére van szükség. Könnyebben elsajátítható és használható, az egyszerűségre és a hatékonyságra összpontosítva.

Az MVVM tervezési mintájának további hátterét lásd: Windows-adatkötés és MVVM, Model-View-ViewModel (MVVM) és az INotifyPropertyChanged Interface referenciadokumentációja.

A WinUI Notes alkalmazás

Az oktatóanyagban szereplő utolsó alkalmazás a WinUI Notes alkalmazás újratervezett verziója, amely a WinUI 3 jegyzetalkalmazás buildelési oktatóanyagából származik. Az alkalmazás lehetővé teszi, hogy a felhasználók több jegyzetet hozzanak létre, mentsenek és töltsenek be. Az eredeti alkalmazás felhasználói felülete változatlan marad, de a frissített architektúra az MVVM Eszközkészletet használja az adatkötéshez és a modellkezelés megtekintéséhez.

AllNotesPage

Képernyőkép a WinUI Notes alkalmazásról, amely három mentett jegyzetet jelenít meg az AllNotesPage nézetben.

NotePage

Képernyőkép a WinUI Notes alkalmazásról, amelyen egy üres jegyzetlap látható a NotePage nézetben.

Jótanács

Windows-alkalmazások létrehozásakor gyakran hivatkozik API-referencia-dokumentumokra és fogalmi dokumentumokra. Ebben az oktatóanyagban beágyazott hivatkozások jelennek meg a szövegben és a "További információ a dokumentumokban:" címkével ellátott csoportokban. Ezek a hivatkozások nem kötelezőek; az oktatóanyag elvégzéséhez nem kell követnie őket. Ezek abban az esetben vannak megadva, ha fel szeretné jegyezni, hogy hol találja meg a szükséges információkat, amikor saját alkalmazásokat hoz létre.