MVVMcross поддерживает код, специфичный для платформы, через несколько механизмов, позволяя разработчикам создавать кроссплатформенные приложения, в то же время используя функции собственной платформы. Вот подробный обзор того, как MVVMcross облегчает код, специфичный для платформы:
1. Разделение проблем **
Приложения MVVMcross обычно структурированы в две основные части: основной проект и проекты пользовательского интерфейса, специфичные для платформы. Основной проект, часто реализуемый как портативная библиотека классов (PCL) или стандартная библиотека .NET, содержит бизнес-логику, модели, модели просмотра и интерфейсы для сервисов для специфичных для платформы. Это разделение обеспечивает максимальное повторное использование кода на разных платформах, сохраняя при этом код, специфичный для платформы, изолированный в проектах пользовательского интерфейса [2] [7].2. Инверсия контроля (IOC) и инъекции зависимостей **
MVVMcross использует контейнер IOC для управления зависимостями. Это позволяет разработчикам регистрировать специфичные для платформы услуги в проектах, специфичных для платформы, вводить их в модели просмотра основного проекта. Например, если приложению необходимо получить доступ к камере, основной проект может определить интерфейс для доступа к камере, и каждый специфичный проект платформы может обеспечить свою собственную реализацию этого интерфейса. Затем контейнер IOC разрешает эти зависимости во время выполнения, гарантируя, что используется правильная услуга, специфичная для платформы [2] [8] [11].3. Службы специфичных для платформы **
Службы специфики для платформы внедряются в нативных проектах пользовательского интерфейса. Эти службы зарегистрированы в классе настройки каждого проекта платформы. Класс настройки отвечает за начальную загрузку MVVMcross и регистрацию сервисов для конкретных платформ в контейнере IOC. Это позволяет просмотреть модели в основном проекте использовать функциональность, специфичную для платформы, без непосредственного ссылки на API, специфичные для платформы [2] [7].4. плагин Framework **
MVVMcross включает в себя плагинную структуру, которая позволяет разработчикам легко интегрировать специфичные для платформы функции в свои приложения. Плагины могут предоставлять функции, такие как местоположение GPS, локализация, датчики и многое другое. Эти плагины зарегистрированы в контейнере IOC, что позволяет моделям просмотра доступа к функциям, специфичным для платформы, посредством инъекции зависимостей. Эта структура также поддерживает фиктивные реализации в целях тестирования [4] [11].5. Настраиваемый двигатель для привязки **
MVVMcross предоставляет настраиваемый привязывающий двигатель, который позволяет разработчикам создавать пользовательские привязки для представлений, специфичных для платформы. Эта функция особенно полезна при работе с нативными элементами управления, которые не поддерживают стандартные механизмы связывания данных. Определяя пользовательские привязки, разработчики могут убедиться, что их модели представления правильно подключены к представлениям, специфичным для платформы [4].6. Платформы **
MVVMcross использует докладчики для специфичных для платформы (например, `imvxiosviewpresenter`,` imvxandroidviewpresenter`), чтобы управлять тем, как виды отображаются на каждой платформе. Эти докладчики позволяют настраивать логику презентации, что позволяет разработчикам адаптировать поведение пользовательского интерфейса к требованиям конкретной платформы [3].Таким образом, MVVMcross поддерживает код, специфичный для платформы, предоставляя структурированный подход к отделению бизнес-логики от реализации специфичной для платформы, используя МОК и впрыск зависимостей для управления услугами и предлагая настраиваемые платформы и плагины для интеграции собственных функций. Это позволяет разработчикам максимизировать повторное использование кода, все еще предоставляя пользовательский опыт, специфичный для платформы.
Цитаты:[1] https://www.suneco.nl/blogs/boost-your-xamarin-native-projects-with-mvvmcross/
[2] https://dev.to/christian1006/creating-cross-platform-xamarin-applications-using-the-mvvmcross-framework-2920
[3] https://canbilgin.wordpress.com/tag/mvvmcross/
[4] https://github.com/mvvmcross/mvvmcross
[5] https://www.codeproject.com/articles/863695/introduction-to-mvvmcross-platform
[6] https://mentormate.com/blog/6-reasons-mvvmcross speeds-xamarin-development-personalizes-ux/
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://stackoverflow.com/questions/14337063/platform-price-ioc-in-mvvmcross
[9] https://www.mvvmcross.com/documentation/getting-started/getting-started
[10] https://leaware.com/creating cross-platform-xamarin-applications-using-the-mvvmcross-framework/
[11] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross