MVVMCross에서`mvxview`와`mvxviewcontroller '를 사용하면 몇 가지 일반적인 함정이 발생할 수 있습니다. 이러한 문제를 이해하면 개발자가이를 피하고 더 부드러운 개발을 보장하는 데 도움이 될 수 있습니다.
1. 유형 변환 문제 **
일반적인 문제 중 하나는 유형 변환입니다. MVVM 패턴에서, 뷰 모델에 정의 된 특성은 UI에 의해 직접 소비되지 않을 수 있습니다. 예를 들어, 이미지 속성은 바이트 배열 일 수 있지만 UI는 이미지 소스로 기대합니다. MVVMCross는 이러한 변환을 처리하기 위해`IMVXVALUECONVERTER` 인터페이스를 제공하지만, 캐스팅이 필요합니다. 일반적인`mvxvalueconverter '클래스는 입력 및 출력 유형을 명시 적으로 지정할 수 있도록 도와줍니다 [1].2. 라이프 사이클 관리 **
MVVMCross 5.0부터 뷰 모델은보기의 수명주기와 결합되어`sapering ()`,`sexect ()`,`사라지는 ()`및`사라진 ()`와 같은 방법을 제공합니다 ()`. 이러한 방법은 ViewModel의 상태를 더 잘 제어 할 수 있지만, 100% 신뢰할 수 없으며 플랫폼 별 이벤트 또는 사용자 정의 앱 논리에 의해 영향을받을 수 있습니다 [2] [7]. 이러한 수명주기 이벤트의 적절한 취급을 보장하는 것이 중요합니다.3. 바인딩 문제 **
구속력 문제는 특히 사용자 정의 뷰 또는 컨트롤을 사용할 때 발생할 수 있습니다. 예를 들어, ViewModel의 데이터를 사용할 수 있기 전에 사용자 정의 컨트롤이 작성되면 'DataconText'가 NULL 일 수 있습니다. 'Delaybind'를 사용하면 데이터를 사용할 수있을 때까지 바인딩을 지연시켜이를 해결하는 데 도움이됩니다 [4].4. ViewModels의 재사용 가능성 **
MVVMCross, 특히 iOS의 뷰 모델은 특정 뷰와 밀접하게 결합되어 재사용 성을 줄일 수 있습니다. 이는 ViewModel이 레이블 형식 또는 테이블 뷰의 데이터 소스 역할과 같은보기별로 논리를 처리 할 때 발생합니다. 이를 피하기 위해 ViewModels는 비즈니스 로직에 중점을두고 컨버터 또는 기타 메커니즘을 사용하여보기 별 변환을 처리하십시오 [3].5. 플랫폼 별 항법 **
MVVMCross는 크로스 플랫폼 내비게이션을 지원하지만 각 플랫폼에는 고유 한 프리젠 테이션 패턴이 있습니다. 예를 들어 iOS에서 화면 흐름에 스토리 보드를 사용하면 MVMCross의 크로스 플랫폼 접근 방식과 충돌 할 수 있습니다. ViewModel에서 내비게이션 로직을 처리하고 플랫폼 별 발표자를 사용하여 뷰가 표시되는 방식을 관리하는 것이 가장 좋습니다 [5] [9].6. 링커 안전 **
MVVMCross는 링커-안전하지 않으므로 컴파일 동안 링커에 의해 프레임 워크의 일부가 제거 될 수 있음을 의미합니다. 이로 인해 런타임 오류가 발생할 수 있습니다. 이를 방지하려면 프레임 워크의 필요한 부분을 보존하기 위해 링커를 힌트해야합니다 [6].이러한 잠재적 인 함정을 인식함으로써 개발자는 MVVMCross 애플리케이션에서 'MVXView'및 'MVXViewController'를 사용하는 복잡성을 더 잘 탐색 할 수 있습니다.
인용 :[1] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[2] https://www.mvvmcross.com/mvvmcross-5-release/
[3] https://www.danielhall.io/the-problems-with-mvvm-on-ios
[4] https://stackoverflow.com/questions/56531225/problem-with-binding-to-mvxview-with-xamarin-ios-and-mvvmcross
[5] https://kerry.lothrop.de/ios-ui-with-mvvmcross/
[6] https://github.com/mvvmcross/mvvmcross/issues/4286
[7] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[8] https://stackoverflow.com/questions/45966067/mvvmcross-iphone-and-best-practices
[9] https://www.mvvmcross.com/documentation/fundamentals/view-presenters