„MVXConvertingTargetBinding“ „MVVMCross“ yra skirtas užkirsti kelią niekinės atskaitos išimtims, įgyvendinant keletą pagrindinių funkcijų, užtikrinančių patikimą nulinių verčių ir konversijų tvarkymą. Štai kaip tai padeda išvengti tokių išimčių:
1. Bazinės klasės struktūra: „MVXConvertingTargetbinding“ paveldi iš „mVxtargetbinding“, kuris suteikia pagrindą įrišimo tvarkymui. Ši bazinė klasė apima tikslinio objekto valdymo ir įvykių tvarkymo mechanizmus, kurie iš esmės apima niekinių nuorodų patikrinimus.
2. Silpnos nukreipimo į taikinį: „MVXTArgetbinding“ klasė, iš kurios gauna „mvxConvertingTargetbinding“, naudoja „silpnapranką“ tiksliniam objektui laikyti. Šis požiūris padeda išvengti atminties nutekėjimo ir užtikrina, kad prireikus tikslinį objektą galima surinkti šiukšles. Nors tai tiesiogiai netenkina niekinės atskaitos išimčių, ji padeda valdyti objekto eksploatavimo laiką, sumažinant netikėtų niekinių tikimybę.
3. Virtualūs „SetValue“ praleidimo metodai: „MvxConvertingTargetBinding“ pateikia virtualius metodus, tokius kaip „iSSKIPSETValueForviewSpecificReasons ()` ir `iSSKIPSETValueForPlatformSPecificReasonReason ()` `. Šie metodai leidžia kūrėjams įgyvendinti logiką, kuri galėtų praleisti vertės nustatymą, jei bus įvykdytos tam tikros sąlygos, potencialiai išvengdami scenarijų, kai nulinės vertės gali sukelti problemų.
4. Konverterio palaikymas: pagrindinė „MvxConvertingTargetBinding“ funkcija yra palaikyti keitiklius, kurie naudojami vertėms pakeisti tarp šaltinio ir taikinio. Nors patys keitikliai iš esmės netenkina niekinės nuorodų išimčių, jie gali būti skirti grakščiai tvarkyti niekines vertes. Pvz., Keiteris gali grąžinti numatytąją vertę arba tuščią eilutę, jei įvestis yra NULL.
5. Įvykių tvarkymas: Dviejų krypčių įrišimuose „MVXConvertingTargetBinding“ tvarko įvykius, kad atnaujintų šaltinį, kai keičiasi taikinys. Tai užtikrina, kad įvykių prižiūrėtojai būtų tinkamai pritvirtinti ir atskirti, o tai padeda išvengti niekinės atskaitos išimčių, vengdami bandymų iškviesti metodus ant nulinių objektų.
6. Gynybos programavimo praktika: Nors ir aiškiai nėra pačios „mVxConvertingTargetbinding“ klasės dalis, kūrėjai, naudojantys šią klasę, yra skatinami laikytis gynybinės programavimo praktikos. Tai apima „Null“ nuorodų patikrinimą prieš bandant jas naudoti, o tai yra nepaprastai svarbi užkirsti kelią niekinės atskaitos išimtims.
Apibendrinant galima pasakyti, kad „mvxConvertingTargetbinding“ tiesiogiai netrukdo nulinėms nuorodų išimtims atliekant aiškius nulinius patikrinimus, ji pateikia sistemą, skatinančią tvirtą įrišimų ir konversijų tvarkymą, sumažinant tokių išimčių tikimybę. Kūrėjai vis tiek turėtų įgyvendinti niekinius patikrinimus ir gynybinio programavimo praktiką, kai naudojasi šia klase, kad įsitikintų, jog jų kodas yra tvirtas atsižvelgiant į niekines nuorodų išimtis.
Citatos:[1] https://www.mvvmcross.com/documentation/advanced/custom-data-Briding
[2] http://mcx.space/wiki/index.cgi?doc%2freadme
[3] https://rubberduckvba.blog/2020/10/25/making-mvvm-work-in-vba-part-3-dingings/
[4] https://blog.postsharp.net/nullreferenceException-object-reference-not-set
[5] https://www.christianfindlay.com/blog/stop-base-nulreferenceExceptions
[6] https://github.com/whitphx/vscode-emacs-mcx
[7] https://stackoverflow.com/questions/63497549/binding-onwayTosource-with-onetime-initation-of-Target
[8] https://learn.microsoft.com/en-us/dotnet/api/system.nullreferenceException?view=net-9.0