Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Cum se compară performanța legăturilor fluente cu expresiile de legare elvețiene/Tibet în MVVMcross


Cum se compară performanța legăturilor fluente cu expresiile de legare elvețiene/Tibet în MVVMcross


Atunci când comparați performanța legăturilor fluente cu expresiile de legare elvețiene/Tibet în MVVMcross, mai mulți factori intră în joc. Iată o defalcare detaliată:

Prezentare generală a tipurilor de legare

- Legături fluente: Acestea sunt expresii de legare sigure de tip creat în codul C#. Sunt deosebit de utile pe platforme precum iOS și UWP, unde fișierele de aspect XML nu sunt ușor editabile. Legăturile fluente oferă o modalitate clară, puternic tipată de a lega proprietățile de vizualizare pentru a vizualiza proprietățile modelului, ceea ce poate ajuta la reducerea erorilor de rulare prin capturarea nepotrivirii tipului de tip la timpul de compilare [1] [4].

- Expresii de legare elvețiene/Tibet: Acestea sunt expresii de legare bazate pe șir utilizate în mod obișnuit în fișierele de dispunere XML (de exemplu, AXML-ul lui Android). Legăturile elvețiene sunt mai flexibile și permit expresii complexe precum concatenarea și logica condiționată. Legarea Tibet extinde acest lucru prin susținerea sintaxei mai avansate similară cu un mini-limbă pentru expresiile de legare [1] [6].

Comparație de performanță

Compile Time vs. Runtime Evaluare

- Legături fluente: Deoarece legăturile fluente sunt definite în C#, acestea sunt evaluate la timp de compilare. Aceasta înseamnă că orice erori de tip sau probleme de legare sunt prinse timpuriu, potențial îmbunătățirea eficienței dezvoltării. Cu toate acestea, performanța reală în timpul rulării este în general similară cu alte metode de legare, deoarece configurarea de legare este încă executată la runtime.

- Legături elvețiene/Tibet: aceste legături sunt evaluate la timpul de rulare, deoarece sunt definite ca șiruri în fișierele XML. Aceasta înseamnă că orice erori în expresiile de legare sunt descoperite numai atunci când se rulează aplicația, ceea ce poate duce la cicluri de dezvoltare mai lente, dacă nu este testat în mod corespunzător. Cu toate acestea, evaluarea în timp de rulare nu le face în mod mai lent decât legăturile fluente odată ce legăturile sunt configurate.

Runtime Overhead

- Legături fluente: deasupra legăturilor fluente este minimă, deoarece creează direct obiectele de legare necesare în cod. Această abordare directă poate fi puțin mai eficientă decât analizarea expresiilor șir la runtime.

- Legături elvețiene/Tibet: Acestea necesită analizarea expresiilor de legare de la XML la runtime, ceea ce introduce unele cheltuieli generale în comparație cu legăturile fluente. Cu toate acestea, acest cheltuieli generale este de obicei mic, cu excepția cazului în care se ocupă de legături foarte complexe sau numeroase.

Eficiența dezvoltării și gestionarea erorilor

- Legături fluente: asigură o eficiență de dezvoltare mai bună datorită verificărilor în timp de compilare, ceea ce poate îmbunătăți indirect performanța prin reducerea timpului petrecut de depanare a problemelor de legare în timpul rulării.

- Legături elvețiene/Tibet: Deși sunt mai flexibile pentru expresii complexe, acestea necesită mai multe verificări de rulare și pot duce la o dezvoltare mai lentă, dacă nu sunt testate în mod corespunzător.

Concluzie

În ceea ce privește performanțele brute, legăturile fluente și elvețiene/Tibet sunt în general comparabile odată configurate. Cu toate acestea, legăturile fluente oferă avantaje în eficiența dezvoltării și detectarea erorilor în timp de compilare, ceea ce poate îmbunătăți indirect performanța generală a aplicației prin reducerea timpului de depanare. Legăturile elvețiene/Tibet oferă mai multă flexibilitate în scenarii complexe, dar necesită mai multe verificări de rulare. Alegerea dintre ele depinde adesea de nevoile specifice ale proiectului și de preferința dezvoltatorului pentru definițiile de legare bazate pe cod față de XML.

Citări:
[1] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[2] https://stackoverflow.com/questions/46522577/mvvmcross-issues-with-fluent-binding
[3] https://stackoverflow.com/questions/48422489/mvvmcross-tibet-binding-to-viewmodel-tself
[4] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[5] https://www.youtube.com/watch?v=3-CT97SBMXM
[6] https://stackoverflow.com/questions/48824612
[7] https://github.com/mvvmcross/mvvmcross/issues/1342
[8] https://github.com/mvvmcross/mvvmcross
[9] https://www.mvvmcross.com/documentation/fundamentals/value-converters
[10] https://stackoverflow.com/questions/48066268/xamarin-mvvmcross-fluent-binding-on-uwp
[11] https://crosscuttingconcerns.com/mvvmcross-fluent-databinding