ใน MVVMCROSS ทั้งการผูกที่คล่องแคล่วและการผูกสวิส/ทิเบตจะใช้สำหรับการผูกข้อมูล แต่พวกเขาแตกต่างกันในวิธีการและการใช้งานของพวกเขา ในขณะที่ไม่มีข้อมูลที่ชัดเจนเกี่ยวกับความแตกต่างของประสิทธิภาพระหว่างการผูกทั้งสองประเภทนี้เราสามารถวิเคราะห์ลักษณะของพวกเขาเพื่อทำความเข้าใจผลกระทบที่อาจเกิดขึ้น:
การผูกที่คล่องแคล่ว
การผูกที่คล่องแคล่วเป็นไวยากรณ์ C#-based ที่ช่วยให้นักพัฒนาสามารถสร้างการเชื่อมโยงในรหัส วิธีการนี้มีประโยชน์อย่างยิ่งบนแพลตฟอร์มเช่น iOS และ OSX โดยที่ไฟล์เลย์เอาต์ XML ไม่สามารถแก้ไขได้ง่าย การผูกที่คล่องแคล่วเป็นวิธีที่ปลอดภัยในการผูกคุณสมบัติซึ่งสามารถช่วยลดข้อผิดพลาดรันไทม์โดยการจับประเภทไม่ตรงกันในเวลาที่รวบรวม อย่างไรก็ตามเนื่องจากพวกเขาถูกกำหนดไว้ในรหัสพวกเขาอาจต้องใช้ค่าใช้จ่ายมากขึ้นในแง่ของการบำรุงรักษารหัสเมื่อเทียบกับการผูกมัดที่เปิดเผยเช่นสวิส/ทิเบตการผูกสวิส/ทิเบต
การผูกมัดของสวิสและทิเบตนั้นมีการประกาศซึ่งหมายความว่าจะถูกกำหนดไว้ในรูปแบบ XML หรือสตริง การผูกเหล่านี้มีความรัดกุมมากขึ้นและสามารถฝังได้อย่างง่ายดายในไฟล์เลย์เอาต์ โดยเฉพาะอย่างยิ่งไวยากรณ์การเชื่อมโยงทิเบตนำเสนอภาษานิพจน์ที่สมบูรณ์ยิ่งขึ้นพร้อมคุณสมบัติเช่นการเรียกตัวแปลงค่าฟังก์ชั่นที่มีลักษณะคล้ายฟังก์ชั่นการเชื่อมโยงหลายข้อและไวยากรณ์ตัวดำเนินการอย่างง่าย วิธีการประกาศนี้สามารถมีประสิทธิภาพมากขึ้นในแง่ของความสามารถในการอ่านรหัสและการบำรุงรักษาได้เนื่องจากการเชื่อมโยงสามารถมองเห็นได้อย่างชัดเจนในไฟล์เลย์เอาต์ข้อควรพิจารณาประสิทธิภาพ
ในขณะที่ไม่มีข้อมูลเฉพาะเกี่ยวกับความแตกต่างของประสิทธิภาพระหว่างการผูกมัดอย่างคล่องแคล่วและสวิส/ทิเบตปัจจัยต่อไปนี้อาจมีผลต่อประสิทธิภาพ:-การรวบรวมเวลาเทียบกับความละเอียดของรันไทม์: โดยทั่วไปการผูกที่ได้รับการแก้ไขในเวลาคอมไพล์ (เช่นบางแง่มุมของการผูกที่คล่องแคล่วเนื่องจากลักษณะที่ปลอดภัยประเภท) อาจให้ประสิทธิภาพที่ดีขึ้นเมื่อเทียบกับความละเอียดของรันไทม์ อย่างไรก็ตามการผูก MVVMCROSS มักจะได้รับการแก้ไขในเวลาทำงาน
- ค่าใช้จ่ายของการสะท้อน: การผูกทั้งที่คล่องแคล่วและสวิส/ทิเบตน่าจะใช้การสะท้อนเพื่อแก้ไขชื่อคุณสมบัติ อย่างไรก็ตามการผูกที่คล่องแคล่วอาจมีข้อได้เปรียบเล็กน้อยเนื่องจากลักษณะที่ปลอดภัยประเภทของพวกเขาซึ่งอาจลดความจำเป็นในการสะท้อนกลับอย่างกว้างขวางในเวลารันไทม์
- ความซับซ้อนของการแสดงออกที่มีผลผูกพัน: การผูกทิเบตอนุญาตให้มีการแสดงออกที่ซับซ้อนมากขึ้นซึ่งอาจแนะนำค่าใช้จ่ายเพิ่มเติมเนื่องจากการแยกวิเคราะห์และการประเมินผลการแสดงออกเหล่านี้ อย่างไรก็ตามความซับซ้อนนี้ยังให้ความสามารถในการเชื่อมข้อมูลที่มีประสิทธิภาพมากขึ้น
โดยสรุปในขณะที่ไม่มีการวัดประสิทธิภาพการทำงานที่ชัดเจนเมื่อเทียบกับการผูกที่คล่องแคล่วและสวิส/ทิเบตใน MVVMcross การผูกที่คล่องแคล่วอาจมีข้อได้เปรียบเล็กน้อยเนื่องจากธรรมชาติที่ปลอดภัยและการลดลงของการไตร่ตรองรันไทม์ อย่างไรก็ตามลักษณะที่ประกาศของการผูกมัดสวิส/ทิเบตสามารถปรับปรุงความสามารถในการอ่านและการบำรุงรักษาโค้ดซึ่งอาจส่งผลกระทบต่อประสิทธิภาพการพัฒนาทางอ้อมและประสิทธิภาพของแอปพลิเคชันโดยรวมโดยการลดข้อผิดพลาดและการปรับปรุงคุณภาพของรหัส ในที่สุดตัวเลือกระหว่างวิธีการผูกมัดเหล่านี้ควรอยู่บนพื้นฐานของความต้องการเฉพาะของโครงการเช่นความซับซ้อนของ UI, แพลตฟอร์มที่กำหนดเป้าหมายและการตั้งค่าสำหรับการเชื่อมโยงกับการเชื่อมโยงกับรหัส
การอ้างอิง:[1] http://slodge.blogspot.com/2013/06/tibet-binding.html
[2] https://github.com/mvvmcross/mvvmcross/issues/1342
[3] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/compiled-bindings?view=net-maui-9.0
[4] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[5] https://stackoverflow.com/questions/46522577/mvvmcross-issues-with-fluent-binding
[6] https://www.reddit.com/r/businessintelligence/comments/ky0dq9/is_it_a_best_practice_to_connect_with_views/
[7] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[8] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[9] https://www.mvvmcross.com/documentation/fundamentals/value-converters
[10] https://stackoverflow.com/questions/48422489/mvvmcross-tibet-binding-to-viewmodel-itself