Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon ViewModel Construction과 관련하여 MVVMCross v3에 도입 된 변경 사항


ViewModel Construction과 관련하여 MVVMCross v3에 도입 된 변경 사항


MVVMCross V3에서는 ViewModel Construction과 관련하여 몇 가지 중요한 변화가 도입되었으며, 이는 개발자의 테스트 가능성과 유용성을 향상시키는 것을 목표로했습니다. 주요 변경 사항은 다음과 같습니다.

1. 생성자 기반 의존성 주입 : 주요 변화 중 하나는 생성자 기반 의존성 주입의 도입이었습니다. 이를 통해 개발자는 의존성을 ViewModel의 생성자에 직접 주입하여 종속성을보다 쉽게 ​​관리하고 테스트 가능성을 향상시킬 수있었습니다. 이 전에는 종종 다른 수단을 통해 종종 관리되었으며, 이는 덜 간단 할 수 있습니다.

2. 유형 내비게이션 클래스를 사용한 내비게이션 : MVVMCross v3는 타이핑 된 내비게이션 클래스를 사용한 새로운 내비게이션 시스템을 도입했습니다. 이는 뷰로 직접 탐색하는 대신 개발자가 강하게 유형 클래스를 사용하여 뷰 모델을 탐색 할 수 있음을 의미했습니다. 이 접근법은 플랫폼 별 세부 정보를 추상화하여 크로스 플랫폼 내비게이션을 단순화했습니다.

3. 묘비를위한 뷰 모델 상태 저장 및 재 장전 : V3에 도입 된 또 다른 중요한 기능은 뷰 모델 상태를 저장하고 다시로드하는 기능이었습니다. 이는 메모리 제약으로 인해 운영 체제에 의해 응용 프로그램을 종료 한 다음 사용자가 반환 할 때 복원 된 "Tombstoning"시나리오를 처리하는 데 특히 유용했습니다. ViewModel 상태를 저장함으로써 응용 프로그램은 종료 및 재시작 후에도 현재 상태를 유지할 수 있습니다.

4. 내비게이션 매개 변수는`init ()`메소드로 전달되었습니다 : 이전 버전의 MVVMCross에서 내비게이션 매개 변수는 뷰 모델의 생성자로 직접 전달되었습니다. 그러나 V3부터 시작하여 이러한 매개 변수는 대신`init ()`메소드로 전달되었습니다. 이 변경으로 생성자는 의존성 주입에만 사용될 수있게하여 코드를 클리너하고 유지 관리하기가 가능합니다. `init ()`메소드는 내비게이션 매개 변수가 처리 된 장소가되어보다 유연한 초기화 로직이 가능합니다.

전반적으로 MVVMCross V3의 이러한 변화는 뷰 모델을 구성하고 관리하는보다 체계적이고 유지 관리 가능한 방법을 제공하여 크로스 플랫폼 응용 프로그램의 전반적인 개발 경험을 향상 시켰습니다.

인용 :
[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://github.com/mvvmcross/mvvmcross/releases
[3] https://www.reddit.com/r/csharp/comments/12akrcw/mvvm_question_how_how_do_you_manage_the_interaction/
[4] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup
[5] https://www.mvvmcross.com/blog/
[6] https://softwareengineering.stackexchange.com/questions/389086/do-we-need-models-if-we-are-using-viewmodels
[7] https://stackoverflow.com/questions/16723078/mvvmcross-does-showviewmodel-always-construct-new-instances
[8] https://stackoverflow.com/questions/39587974/changes-in-mvvmcross-bindings
[9] https://www.mvvmcross.com/documentation/fundamentals/navigation
[10] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[11] https://github.com/mvvmcross/mvvmcross/blob/develop/changelog.md