Khi sử dụng `mvxview` và` mvxviewControll` trong mvvmcross, một số cạm bẫy phổ biến có thể phát sinh. Hiểu những vấn đề này có thể giúp các nhà phát triển tránh chúng và đảm bảo sự phát triển mượt mà hơn.
1. Các vấn đề chuyển đổi loại **
Một vấn đề phổ biến là chuyển đổi loại. Trong mẫu MVVM, các thuộc tính được xác định trong ViewModel có thể không được UI tiêu thụ trực tiếp. Ví dụ: thuộc tính hình ảnh có thể là một mảng byte, nhưng giao diện người dùng mong đợi nó như một nguồn hình ảnh. MVVMCROSS cung cấp giao diện `imvxvalueConverter` để xử lý các chuyển đổi đó, nhưng nó đòi hỏi phải đúc, có thể cồng kềnh. Lớp `mvxvalueConverter` chung chung bằng cách cho phép bạn chỉ định các loại đầu vào và đầu ra một cách rõ ràng [1].2. Quản lý vòng đời **
Bắt đầu với MVVMCROSS 5.0, ViewModels được ghép nối với vòng đời của chế độ xem, cung cấp các phương thức như `xuất hiện ()`, `xuất hiện ()`, `biến mất ()` và `biến mất ()`. Mặc dù các phương pháp này cung cấp quyền kiểm soát nhiều hơn đối với trạng thái của ViewModel, nhưng chúng không đáng tin cậy 100% và có thể bị ảnh hưởng bởi các sự kiện cụ thể về nền tảng hoặc logic ứng dụng tùy chỉnh [2] [7]. Đảm bảo xử lý thích hợp các sự kiện vòng đời này là rất quan trọng.3. Các vấn đề ràng buộc **
Các vấn đề ràng buộc có thể xảy ra, đặc biệt là khi sử dụng các chế độ xem hoặc điều khiển tùy chỉnh. Chẳng hạn, nếu một điều khiển tùy chỉnh được tạo trước khi dữ liệu của ViewModel có sẵn, `dataContext` có thể là null. Sử dụng `DelayBind` có thể giúp giải quyết điều này bằng cách trì hoãn liên kết cho đến khi dữ liệu có sẵn [4].4. Khả năng tái sử dụng của ViewModels **
ViewModels trong MVVMcross, đặc biệt là trên iOS, có thể được kết hợp chặt chẽ với các quan điểm cụ thể, giảm khả năng tái sử dụng của chúng. Điều này xảy ra khi ViewModels xử lý logic cụ thể của chế độ xem, chẳng hạn như định dạng nhãn hoặc đóng vai trò là nguồn dữ liệu cho chế độ xem bảng. Để tránh điều này, hãy giữ cho ViewModels tập trung vào logic kinh doanh và sử dụng bộ chuyển đổi hoặc các cơ chế khác để xử lý các phép biến đổi cụ thể về chế độ xem [3].5. Điều hướng dành riêng cho nền tảng **
MVVMcross hỗ trợ điều hướng đa nền tảng, nhưng mỗi nền tảng có các mẫu trình bày duy nhất. Ví dụ, trên iOS, sử dụng bảng phân cảnh cho luồng màn hình có thể mâu thuẫn với cách tiếp cận đa nền tảng của MVVMCROSS. Tốt nhất là xử lý logic điều hướng trong ViewModel và sử dụng những người trình bày dành riêng cho nền tảng để quản lý cách hiển thị các chế độ xem [5] [9].6. An toàn người liên kết **
MVVMCROSS không an toàn liên kết, có nghĩa là các phần của khung có thể bị loại bởi trình liên kết trong quá trình biên dịch. Điều này có thể dẫn đến lỗi thời gian chạy. Để ngăn chặn điều này, bạn cần gợi ý trình liên kết để bảo tồn các phần cần thiết của khung [6].Bằng cách nhận thức được những cạm bẫy tiềm năng này, các nhà phát triển có thể điều hướng tốt hơn sự phức tạp của việc sử dụng `mvxview` và` mvxviewControll` trong các ứng dụng MVVMcross.
Trích dẫn:[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-ipad-best-practices
[9] https://www.mvvmcross.com/documentation/fundamentals/view-presenters