У MVVMcross і вільні зв'язування, і швейцарські/тибетні зв'язки використовуються для зв'язування даних, але вони відрізняються своїм підходом та використанням. Незважаючи на те, що між цими двома типами прив'язок ми можемо проаналізувати їх характеристики, щоб зрозуміти потенційні наслідки:
Вільні зв'язки
Вільні зв'язки-це синтаксис на основі C#, що дозволяє розробникам створювати прив'язки в коді. Такий підхід особливо корисний для платформ, таких як iOS та OSX, де файли макета XML не легко підлягають людським редакціям. Вільні прив’язки забезпечують безпечний тип способу зв'язування властивостей, що може допомогти зменшити помилки виконання, сплавляючи невідповідності типу під час компіляційного часу. Однак, оскільки вони визначені в коді, вони можуть вимагати більше накладних витрат з точки зору підтримки коду порівняно з декларативними прив'язками, такими як швейцарський/тибет.швейцарські/тибетні зв'язки
Швейцарські та тибетні зв'язки є декларативними, тобто вони визначаються у форматах XML або рядків. Ці прив’язки є більш стислими і їх можна легко вбудувати у файли макета. Зокрема, синтаксис зв'язування тибету пропонує більш багатальну мову виразів з такими функціями, як функціональне значення перетворювача, багатозв'язок та простий синтаксис оператора. Цей декларативний підхід може бути більш ефективним з точки зору читабельності коду та ремонтопридатності, оскільки прив’язки чітко видно у файлах макета.міркування щодо ефективності
Незважаючи на те, що немає конкретних даних про відмінності щодо ефективності між вільними та швейцарськими/тибетними зв'язками, наступні фактори можуть впливати на продуктивність:-Роздільна здатність компіляції проти часу виконання: Загалом, прив'язки, які вирішуються під час компіляції (як і деякі аспекти вільних зв'язків через їхній тип, безпечний тип) можуть запропонувати кращі показники порівняно з роздільною здатністю виконання. Однак зв'язування MVVMcross, як правило, вирішуються під час виконання.
- Накладні витрати на відбиття: як вільні, так і швейцарські/тибетні прив'язки, ймовірно, використовують відображення для вирішення назв властивостей. Однак вільні зв'язки можуть мати незначну перевагу завдяки безпечному характеру типу, що потенційно зменшує потребу в широкому роздумі під час виконання.
- Складність експресій зв'язування: Тибетські зв'язки дозволяють отримати більш складні вирази, що потенційно може ввести додаткові накладні витрати через розбір та оцінку цих виразів. Однак ця складність також забезпечує більш потужні можливості зв'язування даних.
Підсумовуючи це, хоча немає явних орієнтирів продуктивності, що порівнюють вільні та швейцарські/тибетні зв'язки в MVVMcross, вільні зв'язки можуть забезпечити незначні переваги через безпечний тип та потенційне зменшення відбиття часу виконання. Однак декларативна природа швейцарських/тибетських прив'язок може покращити читабельність коду та ремонтопридатність, що може побічно вплинути на ефективність розвитку та загальну продуктивність додатків за рахунок зниження помилок та покращення якості коду. Зрештою, вибір між цими методами зв'язування повинен ґрунтуватися на конкретних потребах проекту, таких як складність інтерфейсу інтерфейсу, платформа, що націлюється, та перевагу до декларативних зв'язків на основі коду та декларативних зв'язків.
Цитати:[1] http://slode.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-isissue-with-fluent-binding
[6] https://www.reddit.com/r/businessintelligent/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