Slabé vzorce udalostí a klasické udalosti v MVVMCROSS (alebo v akomkoľvek rámci .NET Framework) slúžia rôznym účelom a majú zreteľné implementácie, ktoré sú zamerané predovšetkým na zvládanie únikov pamäte a životnosť objektov.
Klasické udalosti
Klasické udalosti v .NET sú založené na silných odkazoch. Keď sa objekt prihlási k udalosti inému objektu, zo zdroja udalosti sa vytvorí zo zdroja udalosti na predplatiteľa. To znamená, že pokiaľ zdroj udalosti obsahuje odkaz na predplatiteľa, predplatiteľ nemôže byť zhromaždený odpadkami, aj keď už nie je potrebný alebo odkazovaný inde v aplikácii. To môže viesť k úniku pamäte, ak predplatiteľ nie je výslovne odhlásený z udalosti, ak už nie je potrebná.
V MVVMCross sa môžu klasické udalosti použiť na komunikáciu medzi ViewModels and Views, ale vyžadujú starostlivú správu, aby sa predišlo úniku pamäte. Napríklad, ak ViewModel odhaľuje udalosť a zobrazenie sa prihlási, spoločnosť ViewModel bude mať silný odkaz na pohľad, čím sa zabráni tomu, aby sa zbierali odpadky, až kým sa predplatenie výslovne odstráni.
Slabý vzor udalostí
Slabý vzor udalostí je navrhnutý tak, aby zabránil úniku pamäte pomocou slabých referencií namiesto silných. Keď predplatiteľ používa slabý vzor udalostí na prihlásenie na odber udalosti, zdroj udalosti má slabý odkaz na predplatiteľa. To umožňuje odberateľovi, aby sa zbierali odpadky, ak sa už viac nelíši v aplikácii, aj keď sa z udalosti výslovne neodhýbalo.
V MVVMCross môže používanie slabých udalostí pomôcť udržať čistú architektúru zabezpečením toho, aby sa pohľady na pohľady nemajú silné odkazy na pohľady. Toto je obzvlášť dôležité v mobilných aplikáciách, kde je správa pamäte kritická. MVVMCross poskytuje rozšírenia, ako je „slabé zber“ na uľahčenie používania slabých udalostí, čo vývojárom umožňuje prihlásiť sa na odber udalostí bez vytvorenia silných odkazov, ktoré by mohli viesť k úniku pamäte.
Implementácia a výhody
Implementácia slabých udalostí zvyčajne spočíva v vytvorení vlastného mechanizmu na správu predplatných pomocou objektov „slabej referencie“. Tento prístup zaisťuje, že predplatitelia sa môžu zbierať odpadky, ak už nie sú potrebné, čím sa zníži riziko úniku pamäte. Predstavuje však aj ďalšiu zložitosť a mierny režijný výkon v dôsledku potreby skontrolovať, či sú predplatitelia stále nažive pred tým, ako zavolajú obsluhy svojich udalostí.
Nevýhody a úvahy
Aj keď slabý vzorec udalostí je prospešný pre zabránenie úniku pamäte, má určité nevýhody. Implementácia môže byť zložitejšia ako klasické udalosti a existuje riziko, že predplatiteľské objekty „zombie“, ktoré sa už nepoužívajú, ale ešte sa nezhromaždili odpadky. Ak je udalosť vznesená a vykoná sa obsluha odberateľa zombie, môže to viesť k neočakávanému správaniu alebo chybám.
Stručne povedané, slabý vzorec udalostí v MVVMCross sa líši od klasických udalostí použitím slabých odkazov, aby sa zabránilo úniku pamäte a umožnilo ľahším odpadom odberateľom. Aj keď ponúka významné výhody, pokiaľ ide o správu pamäte, vyžaduje starostlivú implementáciu a zváženie potenciálnych nevýhod.
Citácie:[1] https://stackoverflow.com/a/19379912
[2] http://stackoverflow.com/questions/30848118/capturing-the-Onexit-event-in-wpf-with-mvvvmcross/31784453
[3] https://www.reactiveui.net/vs/mvvmcross
[4] https://mustafacanyucel.com/blog/blog-22.html
[5] https://ladimolnar.com/2015/09/14/the-weak-event-pattern-is-danger/
[6] https://www.mvvmcross.com/mvvmcross-6.0.0-rease/
Https://yanxiaodi.gitbook.olio/xamarin-mvvmcross-wandbook/using-mvvmcross-to-create-your-first-xamarin-App/navigation/Responding-the-events-from-different-kontroly-in-the--listview
[8] https://www.devleader.ca/2024/02/14/
[9] https://learn.microsoft.com/en-us/dotnet/desktop/wpf/events/weak-event-patterns?view=netdesktop-9.0
[10] https://www.mvvmcross.com/documentation/funmamentals/navigation
[11] https://www.mvvmcross.com/documentation/funmamentals/viewmodel-lifecycle
[12] https://stackoverflow.com/questions/13788787/when-to-use-weak-events