I MVVMCross används både flytande bindningar och schweiziska/tibetbindningar för databindning, men de skiljer sig åt i deras tillvägagångssätt och användning. Även om det inte finns uttrycklig information om prestationsskillnader mellan dessa två typer av bindningar, kan vi analysera deras egenskaper för att förstå potentiella konsekvenser:
Flytande bindningar
Flytande bindningar är en C#-baserad syntax som gör det möjligt för utvecklare att skapa bindningar i kod. Detta tillvägagångssätt är särskilt användbart på plattformar som iOS och OSX där XML-layoutfiler inte lätt är mänskliga redigerbara. Flytande bindningar ger ett typsäkert sätt att binda egenskaper, vilket kan bidra till att minska runtime-fel genom att fånga typ missförstånd vid kompileringstid. Eftersom de definieras i kod kan de emellertid kräva mer omkostnader när det gäller kodunderhåll jämfört med deklarativa bindningar som schweiziska/Tibet.Swiss/Tibet Bindings
Swiss och Tibet -bindningar är deklarativa, vilket innebär att de definieras i XML- eller strängformat. Dessa bindningar är mer kortfattade och kan enkelt inbäddas i layoutfiler. Särskilt Tibet-bindande syntax erbjuder ett rikare uttrycksspråk med funktioner som funktionsliknande värdekonverterare, multifindlingar och enkel operatörssyntax. Detta deklarativa tillvägagångssätt kan vara mer effektiv när det gäller kodläsbarhet och underhållbarhet, eftersom bindningar tydligt är synliga i layoutfilerna.Prestationsöverväganden
Även om det inte finns specifika data om prestationsskillnader mellan flytande och schweiziska/tibetbindningar, kan följande faktorer påverka prestanda:-Kompileringstid kontra körtidsupplösning: I allmänhet kan bindningar som löses vid kompileringstid (som vissa aspekter av flytande bindningar på grund av deras typsäkra natur) ge bättre prestanda jämfört med runtime-upplösning. MVVMCross -bindningar löses emellertid vanligtvis vid körning.
- Reflektionens overhead: Både flytande och schweiziska/Tibet -bindningar använder troligen reflektion för att lösa fastighetsnamn. Emellertid kan flytande bindningar ha en liten fördel på grund av deras typsäkra natur, vilket potentiellt kan minska behovet av omfattande reflektion vid körning.
- Komplexitet i bindande uttryck: Tibetbindningar möjliggör mer komplexa uttryck, som potentiellt kan införa ytterligare omkostnader på grund av analys och utvärdering av dessa uttryck. Denna komplexitet ger emellertid också mer kraftfulla databindningsfunktioner.
Sammanfattningsvis, även om det inte finns några uttryckliga prestanda riktmärken som jämför flytande och schweiziska/tibet bindningar i MVVMCross, kan flytande bindningar ge små fördelar på grund av deras typsäkra natur och potentiell minskning av körtidsreflektionen. Emellertid kan den deklarativa karaktären hos schweiziska/Tibet bindningar förbättra kodläsbarhet och underhållbarhet, vilket indirekt kan påverka utvecklingseffektiviteten och övergripande applikationsprestanda genom att minska fel och förbättra kodkvaliteten. I slutändan bör valet mellan dessa bindningsmetoder baseras på projektets specifika behov, till exempel komplexiteten i UI, plattformen riktad och preferensen för kodbaserad kontra deklarativa bindningar.
Citeringar:[1] http://slodge.blogspot.com/2013/06/tibet-binding.html
[2] https://github.com/mvvmcross/mvvmcross/issues/1342
[3] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/compiled-bindings?view=net-maui-9.0
[4] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[5] https://stackoverflow.com/questions/46522577/mvvmcross-issues-with-fluent-binding
[6] https://www.reddit.com/r/businessintelligence/comments/ky0dq9/is_it_a_best_practice_to_connect_with_views/
[7] https://www.mvvmcross.com/documentation/fundamentals/data-binding
]
[9] https://www.mvvmcross.com/documentation/fundamentals/value-converters
[10] https://stackoverflow.com/questions/48422489/mvvmcross-tibet-binding-to-viewmodel-tselfself