MVVMCross, çeşitli mekanizmalar aracılığıyla platforma özgü kodu destekleyerek geliştiricilerin yerel platform özelliklerinden yararlanırken platformlar arası uygulamalar oluşturmalarını sağlar. İşte MVVMCross'un platforma özgü kodu nasıl kolaylaştırdığına dair ayrıntılı bir bakış:
1. Endişelerin Ayrılması **
MVVMCross uygulamaları tipik olarak iki ana bölüme yapılandırılmıştır: temel bir proje ve platforma özgü kullanıcı arayüzü projeleri. Genellikle taşınabilir sınıf kütüphanesi (PCL) veya .NET standart kütüphanesi olarak uygulanan temel proje, platforma özgü hizmetler için iş mantığını, modelleri, görünüm modellerini ve arayüzleri içerir. Bu ayırma, UI projelerinde platforma özgü kodu izole tutarken platformlar arasında maksimum kodun yeniden kullanılmasına izin verir [2] [7].2. Kontrol (IOC) ve bağımlılık enjeksiyonunun tersine çevirme **
MVVMCross, bağımlılıkları yönetmek için bir IOC kapsayıcısı kullanır. Bu, geliştiricilerin platforma özgü projelere platforma özgü hizmetleri kaydettirmelerini ve bunları temel projenin görüş modellerine enjekte etmelerini sağlar. Örneğin, bir uygulamanın kameraya erişmesi gerekiyorsa, çekirdek proje kamera erişimi için bir arayüz tanımlayabilir ve platforma özgü her proje bu arayüzün kendi uygulamasını sağlayabilir. IOC kapsayıcısı daha sonra bu bağımlılıkları çalışma zamanında çözer ve platforma özgü hizmetin kullanıldığını sağlar [2] [8] [11].3. Platforma özgü hizmetler **
Platforma özgü hizmetler yerel kullanıcı arayüzü projelerinde uygulanmaktadır. Bu hizmetler her platform projesinin kurulum sınıfına kaydedilir. Kurulum sınıfı, MVVMCross'u önyüklemek ve platforma özgü hizmetleri IOC kapsayıcısıyla kaydetmekten sorumludur. Bu, çekirdek projedeki görünüm modellerinin platforma özgü API'lere doğrudan atıfta bulunmadan platforma özgü işlevselliği kullanmasına izin verir [2] [7].4. Eklenti Çerçevesi **
MVVMCross, geliştiricilerin platforma özgü özellikleri uygulamalarına kolayca entegre etmelerini sağlayan bir eklenti çerçevesi içerir. Eklentiler GPS konumu, yerelleştirme, sensörler ve daha fazlası gibi işlevler sağlayabilir. Bu eklentiler IOC kapsayıcısına kayıtlıdır ve görünüm modellerinin bağımlılık enjeksiyonu yoluyla platforma özgü özelliklere erişmesini sağlar. Bu çerçeve aynı zamanda test amacıyla sahte uygulamaları da desteklemektedir [4] [11].5. Özelleştirilebilir bağlanma motoru **
MVVMCross, geliştiricilerin platforma özgü görünümler için özel bağlamalar oluşturmalarını sağlayan özelleştirilebilir bir bağlanma motoru sağlar. Bu özellik, standart veri bağlama mekanizmalarını desteklemeyen yerel kontrollerle çalışırken özellikle kullanışlıdır. Geliştiriciler, özel bağlamaları tanımlayarak, görünüm modellerinin platforma özgü görünümlere uygun şekilde bağlanmasını sağlayabilir [4].6. Platform Sunucuları **
MVVMCross, görünümlerin her platformda nasıl görüntülendiğini yönetmek için platforma özgü sunum yapanları (örn., `ImvxiosViewPresenter`,` ImvxandroidViewPresenter`) kullanır. Bu sunucular, sunum mantığının özelleştirilmesine izin vererek geliştiricilerin UI davranışını belirli platformun gereksinimlerine uyarlamalarını sağlar [3].Özetle, MVVMCross, iş mantığını platforma özgü uygulamadan ayırmak, hizmet yönetimi için IOC ve bağımlılık enjeksiyonundan yararlanarak ve yerel özellikleri entegre etmek için özelleştirilebilir bağlanma ve eklenti çerçeveleri sunarak yapılandırılmış bir yaklaşım sağlayarak platforma özgü kodu destekler. Bu, geliştiricilerin platforma özgü kullanıcı deneyimleri sunarken kod yeniden kullanımını en üst düzeye çıkarmasına olanak tanır.
Alıntılar:[1] https://www.suneco.nl/blogs/boost-Your-xamarin-native-projects-with-mvvmcross/
[2] https://dev.to/christian1006/creating-cross-platform-xamarin-applications-ing-the-mvvmcross-framework-2920
[3] https://canbilgin.wordpress.com/tag/mvmcross/
[4] https://github.com/mvvmcross/mvvmcross
[5] https://www.codeproject.com/articles/863695/introduction-ton-mvvmcross-platform
[6] https://mentorate.com/blog/6-reasons-mvmcross-speeds-xamarin-deelopment-personalizes-ux/
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://stackoverflow.com/questions/14337063/platform-specific-ioc-in-mvvmcross
[9] https://www.mvvmcross.com/documentation/getting-started/getting-started
[10] https://leaware.com/creating-cross-platform-xamarin-applications-using-the-mvmcross-pramework/
[11] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross