Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon แอตทริบิวต์ [จำเป็น] มีปฏิสัมพันธ์กับประเภทที่ไม่มีค่าใช้จ่ายอย่างไรใน MVVMCROSS API


แอตทริบิวต์ [จำเป็น] มีปฏิสัมพันธ์กับประเภทที่ไม่มีค่าใช้จ่ายอย่างไรใน MVVMCROSS API


แอตทริบิวต์ `[จำเป็น]` ใน C# ใช้เพื่อให้แน่ใจว่าจะต้องให้คุณสมบัติเมื่อ deserializing ข้อมูลเช่นจาก JSON อย่างไรก็ตามเมื่อรวมกับประเภทที่ไม่มีค่าใช้จ่ายมันสามารถดูได้ง่ายเพราะประเภทที่ว่างเปล่าสามารถเป็นโมฆะได้ ชุดค่าผสมนี้มักจะใช้เพื่อป้องกันการโจมตีที่ไม่ค่อยมีการโพสต์ซึ่งผู้ใช้ที่เป็นอันตรายอาจละเว้นคุณสมบัติในการร้องขอทำให้ตัวสร้างแบบจำลองกำหนดค่าเริ่มต้นแทนที่จะเพิ่มข้อผิดพลาด [4]

ในบริบทของ MVVMCROSS ซึ่งเป็นกรอบสำหรับการสร้างแอปพลิเคชันข้ามแพลตฟอร์มโดยใช้รูปแบบ Model-View-ViewModel (MVVM) การโต้ตอบระหว่างแอตทริบิวต์ `[จำเป็น] และประเภทที่ว่างเปล่าไม่ได้ระบุไว้โดยตรง MVVMCROSS มุ่งเน้นไปที่การเชื่อมโยงข้อมูลและการนำทางระหว่างมุมมองและโมเดลมุมมองเป็นหลัก อย่างไรก็ตามการทำความเข้าใจว่าประเภทที่ไม่มีค่าใช้จ่ายในการทำงานใน C# สามารถช่วยนักพัฒนาจัดการความสอดคล้องของข้อมูลและการตรวจสอบความถูกต้องภายในแอปพลิเคชัน MVVMCROSS ของพวกเขา

การทำความเข้าใจประเภทที่ไม่มีค่าใช้จ่าย

C# 8.0 แนะนำประเภทการอ้างอิงที่เป็นโมฆะช่วยให้นักพัฒนาสามารถระบุได้อย่างชัดเจนว่าประเภทการอ้างอิงสามารถเป็นโมฆะได้หรือไม่ คุณลักษณะนี้ช่วยป้องกันข้อยกเว้นการอ้างอิงที่เป็นโมฆะโดยการให้คำเตือนในเวลาคอมไพล์เวลาเมื่อค่า NULL ไม่ได้รับการจัดการอย่างถูกต้อง [7] เมื่อใช้ประเภทที่ไม่มีค่าใช้จ่ายกับแอตทริบิวต์ `[จำเป็น]` แอตทริบิวต์คุณลักษณะจะช่วยให้มั่นใจได้ว่าค่าจะถูกจัดเตรียมไว้อย่างชัดเจนในขณะที่ประเภทที่ไม่มีค่าใช้จ่ายอนุญาตให้มีความเป็นไปได้ที่จะเป็นอินพุตที่ถูกต้องในบางสถานการณ์ [4]

โดยใช้ [จำเป็น] กับประเภทที่ไม่มีค่าใช้จ่าย

ในสถานการณ์ที่คุณจำเป็นต้องบังคับใช้คุณสมบัติที่มีให้ แต่ยังอนุญาตให้เป็นโมฆะ (ตัวอย่างเช่นเพื่อจัดการ payloads JSON ที่คุณสมบัติอาจตั้งค่าเป็นโมฆะอย่างชัดเจน) โดยใช้แอตทริบิวต์ `[จำเป็น]` ที่มีประเภทที่ไม่มีค่าใช้จ่าย อย่างไรก็ตามวิธีการนี้ส่วนใหญ่ใช้กับการตรวจสอบข้อมูลในเว็บ API หรือบริบทที่คล้ายกันมากกว่าภายใน MVVMcross โดยตรง

สำหรับแอพพลิเคชั่น MVVMCROSS ทำให้มั่นใจได้ว่าคุณสมบัติจะเริ่มต้นอย่างเหมาะสมและตรวจสอบความถูกต้องภายในแบบจำลองมุมมองเป็นสิ่งสำคัญ ในขณะที่ MVVMCROSS ไม่ได้โต้ตอบโดยตรงกับแอตทริบิวต์ `[จำเป็น]` ในวิธีที่ไม่ซ้ำนักพัฒนาสามารถใช้ประโยชน์จากประเภทการอ้างอิงที่เป็นโมฆะของ C#และคุณลักษณะการตรวจสอบความถูกต้องเพื่อจัดการความสมบูรณ์ของข้อมูลในแอปพลิเคชันของพวกเขา

การตรวจสอบความถูกต้องที่กำหนดเองใน mvvmcross

หากคุณต้องการบังคับใช้กฎการตรวจสอบความถูกต้องเฉพาะภายในแอปพลิเคชัน MVVMCROSS คุณอาจพิจารณาใช้ตรรกะการตรวจสอบความถูกต้องที่กำหนดเองภายในโมเดลมุมมองของคุณ สิ่งนี้อาจเกี่ยวข้องกับการตรวจสอบค่า NULL หรือตรวจสอบให้แน่ใจว่ามีการเติมคุณสมบัติบางอย่างก่อนดำเนินการกับตรรกะทางธุรกิจ MVVMCROSS จัดเตรียมกลไกสำหรับการเชื่อมโยงข้อมูลที่กำหนดเองและการจัดการปฏิสัมพันธ์ซึ่งสามารถใช้ในการดำเนินการตรวจสอบความถูกต้องดังกล่าว [5]

โดยสรุปในขณะที่ `[จำเป็น]` แอตทริบิวต์และประเภทที่ไม่มีค่าใช้จ่ายส่วนใหญ่ใช้ในบริบทการตรวจสอบข้อมูลเช่นเว็บ API การทำความเข้าใจการโต้ตอบของพวกเขาสามารถช่วยนักพัฒนา MVVMcross จัดการความสอดคล้องของข้อมูลและการตรวจสอบความถูกต้องภายในแอปพลิเคชันของพวกเขา อย่างไรก็ตาม MVVMCROSS นั้นไม่ได้มีการสนับสนุนในตัวที่เฉพาะเจาะจงสำหรับแอตทริบิวต์ `[จำเป็น]` ในวิธีที่เว็บเฟรมเวิร์กอาจ

การอ้างอิง:
[1] https://stackoverflow.com/questions/47074979/mvvmcross-view-model-mvxinteraction-is-always-null
[2] https://dev.to/theramoliya/c-required-attribute-for-nonlable-reference-Types-444HB
[3] https://www.reddit.com/r/csharp/comments/10wayn5/required_attribute_and_null_help/
[4] https://stackoverflow.com/questions/43688968/ what-does-it-mean-for-a-property-to-be-required และ nullable
[5] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[6] https://learn.microsoft.com/en-us/dotnet/csharp/nullable-references
[7] https://devblogs.microsoft.com/dotnet/embracing-nullable-reference-types/
[8] https://www.reddit.com/r/blazor/comments/14x5krd/nullable_types_and_required_keyword_how_is/