MVVMCross'ta akıcı bağların performansını Swiss/Tibet bağlama ifadeleriyle karşılaştırırken, çeşitli faktörler devreye girer. İşte ayrıntılı bir arıza:
Bağlanma türlerine genel bakış
- Akıcı Bağlamalar: Bunlar, C# kodunda oluşturulan türden güvenli bağlanma ifadeleridir. Özellikle XML düzen dosyalarının kolayca düzenlenemediği iOS ve UWP gibi platformlarda yararlıdır. Akıcı bağlar, model özelliklerini görüntülemek için görünüm özelliklerini bağlamak için net, güçlü bir şekilde yazılmış bir yol sağlar, bu da derleme zamanında tip uyumsuzlukları yakalayarak çalışma zamanı hatalarını azaltmaya yardımcı olabilir [1] [4].
- Swiss/Tibet Bağlama İfadeleri: Bunlar tipik olarak XML Düzenli Dosyalarda (örn. Android'in AXML) kullanılan dize tabanlı bağlanma ifadeleridir. İsviçre bağları daha esnektir ve birleştirme ve koşullu mantık gibi karmaşık ifadelere izin verir. Tibet bağlanması, bağlayıcı ifadeler için mini dili benzer daha gelişmiş sözdizimini destekleyerek bunu genişletir [1] [6].
Performans Karşılaştırması
Derleme Zamanı ve Çalışma Zamanı Değerlendirmesi
- Akıcı Bağlamalar: Akıcı bağlar C#'da tanımlandığından, derleme zamanında değerlendirilirler. Bu, herhangi bir tür hatası veya bağlama sorunlarının erken yakalandığı ve potansiyel olarak geliştirme verimliliğini artırdığı anlamına gelir. Bununla birlikte, çalışma zamanındaki gerçek performans genellikle diğer bağlanma yöntemlerine benzer, çünkü bağlanma kurulumu hala çalışma zamanında yürütülür.
- İsviçre/Tibet Bağlamaları: Bu bağlamalar, XML dosyalarında dizeler olarak tanımlandığı için çalışma zamanında değerlendirilir. Bu, bağlanma ifadelerindeki herhangi bir hatanın yalnızca uygulama çalıştığında keşfedildiği anlamına gelir, bu da uygun şekilde test edilmezse daha yavaş gelişim döngülerine yol açabilir. Bununla birlikte, çalışma zamanı değerlendirmesi, bağlar kurulduktan sonra onları akıcı bağlardan daha yavaş hale getirmez.
Çalışma Zamanı Tepesi
- Akıcı bağlar: Akıcı bağların tepesi minimaldir, çünkü kodda gerekli bağlayıcı nesneleri doğrudan oluştururlar. Bu doğrudan yaklaşım, çalışma zamanındaki dize ifadelerini ayrıştırmadan biraz daha verimli olabilir.
- İsviçre/Tibet Bağlamaları: Bunlar, çalışma zamanında XML'den bağlanma ifadelerinin ayrıştırılmasını gerektirir, bu da akıcı bağlamalara kıyasla bazı ek yük getirir. Bununla birlikte, çok karmaşık veya çok sayıda bağlama ile uğraşmadıkça bu yük tipik olarak küçüktür.
Geliştirme Verimliliği ve Hata İşleme
- Akıcı Bağlamalar: Derleme süresi kontrolleri nedeniyle daha iyi geliştirme verimliliği sağlayın, bu da çalışma zamanı bağlama sorunları hata ayıklama süresini azaltarak performansı dolaylı olarak artırabilir.
- İsviçre/Tibet Bağlamaları: Karmaşık ifadeler için daha esnek olmakla birlikte, daha fazla çalışma zamanı kontrolleri gerektirirler ve uygun şekilde test edilmezse daha yavaş gelişmeye yol açabilirler.
Çözüm
Ham performans açısından, hem akıcı hem de İsviçre/Tibet bağları kurulduktan sonra genellikle karşılaştırılabilir. Bununla birlikte, akıcı bağlar, hata ayıklama süresini azaltarak genel uygulama performansını dolaylı olarak artırabilen geliştirme verimliliği ve derleme süresi hata algılamasında avantajlar sunar. İsviçre/Tibet bağları karmaşık senaryolarda daha fazla esneklik sağlar, ancak daha fazla çalışma zamanı kontrolü gerektirir. Aralarındaki seçim genellikle projenin spesifik ihtiyaçlarına ve geliştiricinin kod tabanlı XML tabanlı bağlanma tanımları tercihine bağlıdır.
Alıntılar:[1] https://blog.
[2] https://stackoverflow.com/questions/46522577/mvvmcross-iseses-with-fluent-binding
[3] https://stackoverflow.com/questions/48422489/mvvmcross-tibet-do-viewmodel-itself
[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/fundament/value-converters
[10] https://stackoverflow.com/questions/48066268/xamarin-mvvmcross-fluent-binding-on-uwp
[11] https://crosscuttingconcerns.com/mvvmcross-fluent-databinding