Amikor összehasonlítjuk a folyékony kötések teljesítményét a svájci/tibetkötési kifejezésekkel az MVVMCross -ban, számos tényező szerepel. Itt van egy részletes bontás:
A kötési típusok áttekintése
- Folyékony kötés: Ezek a C# kódban létrehozott típusbiztonsági kötési kifejezések. Különösen hasznosak az olyan platformokon, mint az iOS és az UWP, ahol az XML Layout fájlok nem könnyen szerkeszthetők. A folyékony kötések egyértelmű, erősen típusú módot biztosítanak a nézet tulajdonságainak megkötésére a modell tulajdonságainak megtekintéséhez, amelyek elősegíthetik a futási idő hibáinak csökkentését azáltal, hogy a típus-eltéréseket összeállítják a fordítási időben [1] [4].
- Svájci/Tibet-kötő kifejezések: Ezek karakterlánc-alapú kötési kifejezések, amelyeket általában az XML Layout fájlokban (például Android AXML) használnak. A svájci kötések rugalmasabbak és lehetővé teszik az összetett kifejezéseket, például az összekapcsolódást és a feltételes logikát. A tibetkötés ezt kiterjeszti azáltal, hogy támogatja a fejlettebb szintaxist, mint a mini nyelvhez a kötődési kifejezésekhez [1] [6].
Teljesítmény -összehasonlítás
COVILE-TIME vs Runtime értékelés
- Folyékony kötés: Mivel a folyékony kötéseket a C#-ben határozzák meg, azokat fordítva értékelik. Ez azt jelenti, hogy bármilyen típusú hibát vagy kötési problémát korán elfognak, ami potenciálisan javítja a fejlesztési hatékonyságot. A tényleges teljesítmény a futásidejében azonban általában hasonló a többi kötési módszerhez, mivel a kötési beállítást továbbra is futás közben hajtják végre.
- Svájci/tibeti kötések: Ezeket a kötéseket futásidejében értékelik, mivel ezeket az XML fájlokban karakterláncokként definiálják. Ez azt jelenti, hogy a kötési kifejezések bármely hibáját csak akkor fedezik fel, amikor az alkalmazás fut, ami lassabb fejlődési ciklusokhoz vezethet, ha nem megfelelően teszteljük. A futásidejű értékelés azonban nem teszi őket lassabbá, mint a folyékony kötéseket, ha a kötéseket felállítják.
Futási idő fölött
- Folyékony kötések: A folyékony kötések felső részei minimálisak, mivel közvetlenül létrehozzák a szükséges kötési objektumokat a kódban. Ez a közvetlen megközelítés kissé hatékonyabb lehet, mint a karakterlánc -kifejezések futásidejű elemzése.
- Svájci/tibeti kötések: Ezek megkövetelik az XML kötődési kifejezéseinek a futásidejében történő elemzését, ami bizonyos fejjel bevezeti a folyékony kötésekkel összehasonlítva. Ez a költség azonban általában kicsi, kivéve, ha nagyon összetett vagy számos kötéssel foglalkozik.
Fejlesztési hatékonyság és hibakezelés
- Folyékony kötések: Biztosítson jobb fejlesztési hatékonyságot a fordított idő-ellenőrzések miatt, amelyek közvetett módon javíthatják a teljesítményt azáltal, hogy csökkentik a futásidejű kötési problémák hibakeresésével töltött időt.
- Svájci/tibeti kötések: Bár rugalmasabbak a komplex kifejezésekhez, több futásidejű ellenőrzést igényelnek, és lassabb fejlődéshez vezethetnek, ha nem megfelelően tesztelik.
Következtetés
A nyers teljesítmény szempontjából mind a folyékony, mind a svájci/tibeti kötések általában összehasonlíthatók. A folyékony kötések azonban előnyöket kínálnak a fejlesztési hatékonyság és a fordítási idő-hiba észlelésében, amely közvetett módon javíthatja az alkalmazás teljes teljesítményét a hibakeresési idő csökkentésével. A svájci/tibeti kötések nagyobb rugalmasságot biztosítanak az összetett forgatókönyvekben, de több futásidejű ellenőrzést igényelnek. A köztük lévő választás gyakran a projekt sajátos igényeitől és a fejlesztőnek a kód-alapú és az XML-alapú kötési meghatározásaitól való részesítéstől függ.
Idézetek:[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-tendel
[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