MVVMCross는 여러 메커니즘을 통해 플랫폼 별 코드를 지원하므로 개발자는 여전히 기본 플랫폼 기능을 활용하면서 크로스 플랫폼 응용 프로그램을 만들 수 있습니다. 다음은 MVVMCross가 플랫폼 별 코드를 용이하게하는 방법에 대한 자세한 개요입니다.
1. 우려의 분리 **
MVVMCross 응용 프로그램은 일반적으로 핵심 프로젝트와 플랫폼 별 UI 프로젝트의 두 가지 주요 부분으로 구성됩니다. 휴대용 클래스 라이브러리 (PCL) 또는 .NET Standard Library로 구현되는 핵심 프로젝트에는 비즈니스 로직, 모델, 모델 및 플랫폼 별 서비스 인터페이스가 포함되어 있습니다. 이 분리는 UI 프로젝트에서 플랫폼 별 코드를 분리하는 동시에 플랫폼에서 최대 코드 재사용을 허용합니다 [2] [7].2. 제어의 역전 (IOC) 및 종속성 주입 **
MVVMCross는 IOC 컨테이너를 사용하여 종속성을 관리합니다. 이를 통해 개발자는 플랫폼 별 프로젝트에 플랫폼 별 서비스를 등록하여 핵심 프로젝트의보기 모델에 주입 할 수 있습니다. 예를 들어, 응용 프로그램이 카메라에 액세스 해야하는 경우 핵심 프로젝트는 카메라 액세스를위한 인터페이스를 정의 할 수 있으며 각 플랫폼 별 프로젝트는이 인터페이스의 자체 구현을 제공 할 수 있습니다. 그런 다음 IOC 컨테이너는 런타임시 이러한 종속성을 해결하여 올바른 플랫폼 별 서비스가 사용되는지 확인합니다 [2] [8] [11].3. 플랫폼 별 서비스 **
플랫폼 별 서비스는 기본 UI 프로젝트에서 구현됩니다. 이 서비스는 각 플랫폼 프로젝트의 설정 클래스에 등록됩니다. 설정 클래스는 MVVMCross를 부트 스트랩하고 IOC 컨테이너에 플랫폼 별 서비스를 등록 할 책임이 있습니다. 이를 통해 핵심 프로젝트의보기 모델은 플랫폼 별 API를 직접 참조하지 않고도 플랫폼 별 기능을 사용할 수 있습니다 [2] [7].4. 플러그인 프레임 워크 **
MVVMCross에는 개발자가 플랫폼 별 기능을 애플리케이션에 쉽게 통합 할 수있는 플러그인 프레임 워크가 포함되어 있습니다. 플러그인은 GPS 위치, 현지화, 센서 등과 같은 기능을 제공 할 수 있습니다. 이 플러그인은 IOC 컨테이너에 등록되어있어 뷰 모델이 종속성 주입을 통해 플랫폼 별 기능에 액세스 할 수 있도록합니다. 이 프레임 워크는 또한 테스트 목적으로 모의 구현을 지원합니다 [4] [11].5. 사용자 정의 가능한 바인딩 엔진 **
MVVMCross는 개발자가 플랫폼 별 뷰를위한 사용자 정의 바인딩을 만들 수있는 사용자 정의 가능한 바인딩 엔진을 제공합니다. 이 기능은 표준 데이터 바인딩 메커니즘을 지원하지 않는 기본 컨트롤로 작업 할 때 특히 유용합니다. 사용자 정의 바인딩을 정의함으로써 개발자는 뷰 모델이 플랫폼 별보기에 올바르게 연결되도록 할 수 있습니다 [4].6. 플랫폼 발표자 **
MVVMCross는 플랫폼 별 발표자 (예 :`imvxiosviewpresenter`,`imvxAndroidViewPresenter`)를 사용하여 각 플랫폼에 뷰가 표시되는 방법을 관리합니다. 이 발표자는 프레젠테이션 로직을 사용자 정의 할 수 있도록하여 개발자가 UI 동작을 특정 플랫폼의 요구 사항에 맞게 조정할 수있게합니다 [3].요약하면, MVVMCross는 플랫폼 별 구현에서 비즈니스 로직을 분리하고 서비스 관리를위한 IOC 및 종속성 주입에 대한 구조화 된 접근 방식을 제공하여 플랫폼 별 코드를 지원하며 기본 기능을 통합하기위한 사용자 정의 가능한 바인딩 및 플러그인 프레임 워크를 제공합니다. 이를 통해 개발자는 플랫폼 별 사용자 경험을 제공하면서 코드 재사용을 최대화 할 수 있습니다.
인용 :[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-2issons-mvvmcross-speeds-xamarin-development-pernalizes-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-mvvmcross-framework/
[11] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross