Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ci sono differenze di prestazione tra legami fluenti e legami svizzeri/Tibet in mvvmcross


Ci sono differenze di prestazione tra legami fluenti e legami svizzeri/Tibet in mvvmcross


In MVVMCRoss, sia i legami fluenti che i legami svizzeri/tibet vengono utilizzati per il legame dei dati, ma differiscono nel loro approccio e nell'uso. Sebbene non ci siano informazioni esplicite sulle differenze di prestazione tra questi due tipi di legami, possiamo analizzare le loro caratteristiche per comprendere potenziali implicazioni:

legami fluenti

I legami fluenti sono una sintassi basata su C#che consente agli sviluppatori di creare legami nel codice. Questo approccio è particolarmente utile su piattaforme come iOS e OSX in cui i file di layout XML non sono facilmente edibili all'uomo. I legami fluenti forniscono un modo di tipo-sicuro per legare le proprietà, che possono aiutare a ridurre gli errori di runtime catturando disallineamenti di tipo al momento della compilazione. Tuttavia, poiché sono definiti nel codice, potrebbero richiedere più sovraccarichi in termini di manutenzione del codice rispetto a legami dichiarativi come svizzeri/tibet.

BING SWISS/TIBET

I legami svizzeri e tibet sono dichiarativi, il che significa che sono definiti in formati XML o stringa. Questi legami sono più concisi e possono essere facilmente incorporati nei file di layout. La sintassi di legame Tibet, in particolare, offre un linguaggio di espressione più ricco con caratteristiche come chiamate convertitore di valore simili a funzionalità, multi-legame e sintassi dell'operatore semplice. Questo approccio dichiarativo può essere più efficiente in termini di leggibilità e manutenibilità del codice, poiché i legami sono chiaramente visibili nei file di layout.

Considerazioni sulle prestazioni

Sebbene non ci siano dati specifici sulle differenze di prestazione tra legami fluenti e svizzeri/Tibet, i seguenti fattori potrebbero influenzare le prestazioni:

-Risoluzione del tempo di compilazione vs. runtime: in generale, i legami che vengono risolti al tempo di compilazione (come alcuni aspetti dei legami fluenti a causa della loro natura di tipo-sicuro) potrebbero offrire prestazioni migliori rispetto alla risoluzione di runtime. Tuttavia, i legami MVVMCRoss vengono generalmente risolti in fase di esecuzione.

- Overhead of Reflection: sia i legami fluenti che svizzeri/Tibet probabilmente usano la riflessione per risolvere i nomi delle proprietà. Tuttavia, i legami fluenti potrebbero avere un leggero vantaggio a causa della loro natura di tipo-sicuro, riducendo potenzialmente la necessità di un'ampia riflessione in fase di esecuzione.

- Complessità delle espressioni di legame: i legami Tibet consentono espressioni più complesse, che potrebbero potenzialmente introdurre spese generali aggiuntive a causa dell'analisi e della valutazione di queste espressioni. Tuttavia, questa complessità fornisce anche capacità di legame dei dati più potenti.

In sintesi, sebbene non vi siano benchmark di prestazioni esplicite che confrontano i legami fluenti e svizzeri/tibet in MVVMCRoss, i legami fluenti potrebbero offrire lievi vantaggi a causa della loro natura di tipo-sicuro e potenziale riduzione della riflessione in fase di esecuzione. Tuttavia, la natura dichiarativa dei legami svizzeri/Tibet può migliorare la leggibilità e la manutenibilità del codice, che potrebbero influire indirettamente sull'efficienza dello sviluppo e sulle prestazioni complessive dell'applicazione riducendo gli errori e migliorando la qualità del codice. In definitiva, la scelta tra questi metodi di legame dovrebbe essere basata sulle esigenze specifiche del progetto, come la complessità dell'interfaccia utente, la piattaforma di mira e la preferenza per i legami dichiarativi basati sul codice rispetto al codice.

Citazioni:
[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/compled-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
[8] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[9] https://www.mvvmcross.com/documentation/fundamentals/value-converters
[10] https://stackoverflow.com/questions/48422489/mvvmcross-tibet-binding-to-viewmodel-itself