เมื่อใช้ `mvxview` และ` mvxviewcontroller` ใน mvvmcross ข้อผิดพลาดทั่วไปหลายประการอาจเกิดขึ้นได้ การทำความเข้าใจปัญหาเหล่านี้สามารถช่วยให้นักพัฒนาหลีกเลี่ยงพวกเขาและสร้างความมั่นใจในการพัฒนาที่ราบรื่นขึ้น
1. พิมพ์ปัญหาการแปลง **
ปัญหาหนึ่งที่พบบ่อยคือการแปลงประเภท ในรูปแบบ MVVM คุณสมบัติที่กำหนดไว้ใน ViewModel อาจไม่สามารถบริโภคได้โดยตรงโดย UI ตัวอย่างเช่นคุณสมบัติรูปภาพอาจเป็นอาร์เรย์ไบต์ แต่ UI คาดว่าจะเป็นแหล่งภาพ MVVMCROSS ให้อินเทอร์เฟซ `IMVXVALUECONVERTER` เพื่อจัดการกับการแปลงดังกล่าว แต่ต้องมีการคัดเลือกนักแสดงซึ่งอาจยุ่งยาก คลาส `mvxvalueconverter` ทั่วไปช่วยให้คุณสามารถระบุประเภทอินพุตและเอาต์พุตได้อย่างชัดเจน [1]2. การจัดการวงจรชีวิต **
เริ่มต้นด้วย MVVMCROSS 5.0 ViewModels เชื่อมต่อกับวงจรชีวิตของมุมมองโดยให้วิธีการเช่น `ปรากฏ ()`, `ปรากฏ ()`, `หายไป ()` และ `หายไป ()` ในขณะที่วิธีการเหล่านี้ให้การควบคุมสถานะของ ViewModel มากขึ้น แต่ก็ไม่น่าเชื่อถือ 100% และอาจได้รับผลกระทบจากเหตุการณ์เฉพาะแพลตฟอร์มหรือตรรกะแอพที่กำหนดเอง [2] [7] การสร้างความมั่นใจในการจัดการเหตุการณ์วงจรชีวิตเหล่านี้อย่างเหมาะสมเป็นสิ่งสำคัญ3. ปัญหาการผูกมัด **
ปัญหาการผูกสามารถเกิดขึ้นได้โดยเฉพาะอย่างยิ่งเมื่อใช้มุมมองหรือการควบคุมที่กำหนดเอง ตัวอย่างเช่นหากมีการสร้างการควบคุมแบบกำหนดเองก่อนที่ข้อมูลของ ViewModel จะพร้อมใช้งาน `DataContext` อาจเป็นโมฆะ การใช้ `delaybind` สามารถช่วยแก้ไขปัญหานี้ได้โดยการชะลอการเชื่อมโยงจนกว่าข้อมูลจะพร้อมใช้งาน [4]4. การใช้ซ้ำของ ViewModels **
ViewModels ใน MVVMCROSS โดยเฉพาะอย่างยิ่งบน iOS สามารถเชื่อมโยงกับมุมมองที่เฉพาะเจาะจงอย่างแน่นหนาลดความสามารถในการนำกลับมาใช้ใหม่ได้ สิ่งนี้เกิดขึ้นเมื่อ ViewModels จัดการตรรกะเฉพาะมุมมองเช่นการจัดรูปแบบฉลากหรือทำหน้าที่เป็นแหล่งข้อมูลสำหรับการดูตาราง เพื่อหลีกเลี่ยงสิ่งนี้ให้ให้ ViewModels มุ่งเน้นไปที่ตรรกะทางธุรกิจและใช้ตัวแปลงหรือกลไกอื่น ๆ เพื่อจัดการกับการเปลี่ยนแปลงเฉพาะมุมมอง [3]5. การนำทางเฉพาะแพลตฟอร์ม **
MVVMCROSS รองรับการนำทางข้ามแพลตฟอร์ม แต่แต่ละแพลตฟอร์มมีรูปแบบการนำเสนอที่ไม่ซ้ำกัน ตัวอย่างเช่นบน iOS การใช้กระดานเรื่องราวสำหรับการไหลของหน้าจออาจขัดแย้งกับวิธีการข้ามแพลตฟอร์มของ MVVMcross เป็นการดีที่สุดที่จะจัดการตรรกะการนำทางใน ViewModel และใช้ผู้นำเสนอเฉพาะแพลตฟอร์มเพื่อจัดการวิธีการแสดงมุมมอง [5] [9]6. Linker Safety **
MVVMCROSS ไม่ปลอดภัย Linker ซึ่งหมายความว่าชิ้นส่วนของเฟรมเวิร์กอาจถูกถอดออกโดยตัวเชื่อมโยงระหว่างการรวบรวม สิ่งนี้สามารถนำไปสู่ข้อผิดพลาดรันไทม์ เพื่อป้องกันสิ่งนี้คุณจะต้องบอกใบ้ linker เพื่อรักษาส่วนที่จำเป็นของกรอบงาน [6]ด้วยการตระหนักถึงข้อผิดพลาดที่อาจเกิดขึ้นเหล่านี้นักพัฒนาสามารถนำทางความซับซ้อนของการใช้ `mvxview` และ` mvxviewcontroller` ในแอปพลิเคชัน MVVMcross
การอ้างอิง:[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-mvmcross
[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