MVVMCROSS เวอร์ชัน 3.x และ 4.x มีความแตกต่างหลายประการเกี่ยวกับวงจรชีวิต ViewModel โดยเน้นไปที่วิธีการสร้าง ViewModels เริ่มต้นและจัดการ
mvvmcross 3.x
ใน MVVMCROSS 3.x วงจรชีวิต ViewModel จะติดตามลำดับที่เรียกว่า CIRS: การก่อสร้าง, init (), realoadState () และ start () ลำดับนี้ใช้เพื่อเริ่มต้นและจัดการ ViewModels นี่คือรายละเอียด:
- การก่อสร้าง: ViewModel เป็นอินสแตนซ์โดยใช้คอนเทนเนอร์ IOC ทำให้สามารถฉีดพึ่งพาได้ นี่คือที่บริการและการพึ่งพาอื่น ๆ ถูกฉีดเข้าไปใน ViewModel
- init (): วิธีนี้ใช้เพื่อเริ่มต้นพารามิเตอร์การนำทาง มันถูกเรียกหลังจากการก่อสร้างและเป็นที่ที่คุณมักจะตั้งค่าข้อมูลเริ่มต้นหรือพารามิเตอร์ใด ๆ ที่ส่งผ่านไปยัง ViewModel
- ReloadState (): วิธีนี้มีหน้าที่รับผิดชอบในการคืนสถานะของ ViewModel หลังจาก Tombstoning ซึ่งเกิดขึ้นเมื่อแอปถูกระงับและกลับมาทำงานต่อเนื่องจากเงื่อนไขหน่วยความจำต่ำ
- start (): วิธีนี้เรียกว่าเมื่อเริ่มต้นและการคืนสภาพเสร็จสมบูรณ์ โดยทั่วไปแล้วจะใช้เพื่อเริ่มต้นการดำเนินงานหรืองานต่อเนื่อง
mvvmcross 4.x
MVVMCROSS 4.x ยังคงใช้ลำดับ CIRS แต่แนะนำการเปลี่ยนแปลงและการปรับปรุงบางอย่าง:
- การก่อสร้างยังคงเหมือนเดิมโดยใช้ IOC สำหรับการฉีดพึ่งพา
- init () ยังคงเริ่มต้นพารามิเตอร์การนำทาง แต่ตอนนี้มีความยืดหยุ่นมากขึ้นทำให้สามารถใช้พารามิเตอร์การนำทางที่พิมพ์ได้
- RELODSTATE () ยังคงจัดการกับการคืนสภาพของรัฐหลังจาก TOMBSTONING
- start () คล้ายกัน แต่อาจใช้น้อยลงเนื่องจากการแนะนำวิธีการเริ่มต้นแบบอะซิงโครนัสมากขึ้น
การเปลี่ยนแปลงที่สำคัญใน MVVMCROSS 4.x คือการสนับสนุนอย่างต่อเนื่องสำหรับพารามิเตอร์การนำทางพิมพ์ซึ่งช่วยให้ข้อมูลที่มีโครงสร้างมากขึ้นผ่าน ViewModels นอกจากนี้ MVVMCROSS 4.x วางรากฐานสำหรับการปรับปรุงในอนาคตในการนำทางและการจัดการวงจรชีวิตซึ่งได้รับการปรับปรุงเพิ่มเติมใน MVVMCROSS 5.X
ความแตกต่างที่สำคัญ
- พารามิเตอร์การนำทาง: MVVMCROSS 3.x ผ่านพารามิเตอร์การนำทางโดยตรงไปยังเมธอด `init ()` ในขณะที่ MVVMCROSS 4.x รองรับพารามิเตอร์การนำทางที่พิมพ์ออกมาทำให้ง่ายต่อการส่งข้อมูลที่ซับซ้อนระหว่าง ViewModels
- ความยืดหยุ่นของวงจรชีวิต: MVVMCROSS 4.x ให้ความยืดหยุ่นมากขึ้นในการจัดการชีวิต ViewModel โดยเฉพาะอย่างยิ่งกับการแนะนำวิธีการเริ่มต้นแบบอะซิงโครนัส
- การสนับสนุน Tombstoning: ทั้งสองเวอร์ชันรองรับ Tombstoning แต่ MVVMCROSS 4.x ยังคงปรับแต่งกระบวนการนี้อย่างต่อเนื่องเพื่อให้มั่นใจว่า ViewModels สามารถประหยัดและฟื้นฟูสถานะได้อย่างมีประสิทธิภาพ
โดยรวมแล้ว MVVMCROSS 4.x สร้างขึ้นบนรากฐานที่จัดตั้งขึ้นใน 3.x โดยการเพิ่มการนำทางการจัดการวงจรชีวิตและความยืดหยุ่นในการจัดการข้อมูลที่ซับซ้อนและการดำเนินงานแบบอะซิงโครนัส
การอ้างอิง:[1] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[2] https://stackoverflow.com/questions/49322704/mvvmcross-view-model-lifecycle-restore-not-working
[3] https://stackoverflow.com/questions/15961664/viewmodel-lifecycle-when-does-it-get-disposed
[4] https://stackoverflow.com/questions/71959649/does-mvvmcross-have-a-built-in-message-for-viewmodel-to-tell-view-when-viewappea
[5] https://stackoverflow.com/questions/29372480/mvvmcross-viewmodel-life-cycle
[6] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup
[7] https://www.mvvmcross.com/documentation/tutorials/tipcalc/a-note-about-views-and-viewmodels
[8] https://www.ramotion.com/blog/what-is-mvvm/
[9] https://www.mvvmcross.com/documentation/fundamentals/navigation
[10] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[11] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[12] https://github.com/mvvmcross/mvvmcross/issues/2738