MVVMcross hỗ trợ mã dành riêng cho nền tảng thông qua một số cơ chế, cho phép các nhà phát triển tạo các ứng dụng đa nền tảng trong khi vẫn tận dụng các tính năng nền tảng gốc. Dưới đây là tổng quan chi tiết về cách MVVMcross tạo điều kiện cho mã cụ thể về nền tảng:
1. Tách các mối quan tâm **
Các ứng dụng MVVMcross thường được cấu trúc thành hai phần chính: một dự án cốt lõi và các dự án UI dành riêng cho nền tảng. Dự án cốt lõi, thường được triển khai dưới dạng Thư viện lớp di động (PCL) hoặc Thư viện tiêu chuẩn .NET, chứa logic kinh doanh, mô hình, xem mô hình và giao diện cho các dịch vụ dành riêng cho nền tảng. Sự phân tách này cho phép tái sử dụng mã tối đa trên các nền tảng trong khi giữ mã dành riêng cho nền tảng được phân lập trong các dự án UI [2] [7].2. Đảo ngược kiểm soát (IOC) và tiêm phụ thuộc **
MVVMCROSS sử dụng thùng chứa IOC để quản lý các phụ thuộc. Điều này cho phép các nhà phát triển đăng ký các dịch vụ dành riêng cho nền tảng trong các dự án dành riêng cho nền tảng và đưa chúng vào các mô hình chế độ xem của dự án cốt lõi. Ví dụ: nếu một ứng dụng cần truy cập máy ảnh, dự án cốt lõi có thể xác định giao diện để truy cập camera và mỗi dự án cụ thể của nền tảng có thể cung cấp việc triển khai giao diện này riêng. Sau đó, container IOC giải quyết các phụ thuộc này trong thời gian chạy, đảm bảo rằng dịch vụ dành riêng cho nền tảng chính xác được sử dụng [2] [8] [11].3. Các dịch vụ cụ thể của nền tảng **
Các dịch vụ dành riêng cho nền tảng được triển khai trong các dự án UI bản địa. Các dịch vụ này được đăng ký trong lớp thiết lập của mỗi dự án nền tảng. Lớp Setup chịu trách nhiệm cho MVVMcross bootstrapping và đăng ký các dịch vụ dành riêng cho nền tảng với thùng chứa IOC. Điều này cho phép các mô hình xem trong dự án cốt lõi sử dụng chức năng dành riêng cho nền tảng mà không cần tham khảo trực tiếp các API dành riêng cho nền tảng [2] [7].4. Khung plugin **
MVVMCROSS bao gồm một khung plugin cho phép các nhà phát triển dễ dàng tích hợp các tính năng cụ thể của nền tảng vào các ứng dụng của họ. Plugin có thể cung cấp các chức năng như vị trí GPS, bản địa hóa, cảm biến, v.v. Các plugin này được đăng ký với thùng chứa IOC, cho phép xem các mô hình để truy cập các tính năng cụ thể của nền tảng thông qua tiêm phụ thuộc. Khung này cũng hỗ trợ triển khai giả cho mục đích thử nghiệm [4] [11].5. Công cụ ràng buộc tùy chỉnh **
MVVMCROSS cung cấp một công cụ ràng buộc có thể tùy chỉnh cho phép các nhà phát triển tạo các ràng buộc tùy chỉnh cho các chế độ xem cụ thể của nền tảng. Tính năng này đặc biệt hữu ích khi làm việc với các điều khiển gốc không hỗ trợ các cơ chế liên kết dữ liệu tiêu chuẩn. Bằng cách xác định các ràng buộc tùy chỉnh, các nhà phát triển có thể đảm bảo rằng các mô hình chế độ xem của họ được kết nối đúng với các chế độ xem dành riêng cho nền tảng [4].6. Người thuyết trình nền tảng **
MVVMCROSS sử dụng trình thuyết trình dành riêng cho nền tảng (ví dụ: `imvXiosViewPresenter`,` imvXAndroidViewPresenter`) để quản lý cách hiển thị các chế độ xem trên mỗi nền tảng. Những người thuyết trình này cho phép tùy chỉnh logic trình bày, cho phép các nhà phát triển điều chỉnh hành vi UI theo yêu cầu của nền tảng cụ thể [3].Tóm lại, MVVMcross hỗ trợ mã dành riêng cho nền tảng bằng cách cung cấp một cách tiếp cận có cấu trúc để tách logic kinh doanh khỏi triển khai cụ thể nền tảng, tận dụng IOC và tiêm phụ thuộc để quản lý dịch vụ và cung cấp các khung liên kết và plugin có thể tùy chỉnh để tích hợp các tính năng gốc. Điều này cho phép các nhà phát triển tối đa hóa việc tái sử dụng mã trong khi vẫn cung cấp trải nghiệm người dùng dành riêng cho nền tảng.
Trích dẫn:.
[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
[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
.
[11] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross