ฉันมี DTO ซึ่งบรรจุด้วยการอ่านจากตาราง DynamoDB พูดว่าตอนนี้ดูเหมือนว่านี้:
public class Item
{
public string Id { get; set; } // PK so technically cannot be null
public string Name { get; set; } // validation to prevent nulls but this doesn't stop database hacks
public string Description { get; set; } // can be null
}
มีวิธีปฏิบัติที่ดีที่สุดในการพัฒนาเพื่อจัดการกับสิ่งนี้หรือไม่? ฉันควรหลีกเลี่ยงตัวสร้างที่ไม่มีพารามิเตอร์เนื่องจากเล่นได้ไม่ดีกับ ORM ใน Dynamo SDK (รวมถึงอื่น ๆ )
ดูเหมือนว่าแปลกสำหรับฉันที่จะเขียนpublic string Id { get; set; } = "";เพราะสิ่งนี้จะไม่เกิดขึ้นตั้งแต่Idเป็น PK และไม่มีวันเป็นโมฆะ การใช้งานจะ""เป็นอะไรแม้ว่ามันจะทำยังไงก็ตาม
ดังนั้นวิธีปฏิบัติที่ดีที่สุดในเรื่องนี้?
- ฉันควรจะทำเครื่องหมายพวกเขาทั้งหมด
string?ว่าพวกเขาเป็นโมฆะแม้ว่าบางคนไม่ควร - ฉันควรเริ่มต้น
IdและNameด้วย""เพราะไม่ควรเป็นโมฆะและสิ่งนี้แสดงให้เห็นถึงเจตนาแม้ว่า""จะไม่เคยใช้ - การรวมกันของบางอย่างข้างต้น
โปรดทราบ: นี่เป็นเรื่องเกี่ยวกับ C # 8 ประเภทอ้างอิง nullableหากคุณไม่ทราบว่าสิ่งที่พวกเขาจะไม่ตอบ
= ""คุณสามารถใช้= null!ในการเริ่มต้นคุณสมบัติที่คุณรู้ว่าจะไม่ได้อย่างมีประสิทธิภาพเป็นnull(เมื่อคอมไพเลอร์มีทางรู้เลยว่า) หากDescriptionถูกต้องตามกฎหมายสามารถก็ควรจะประกาศให้เป็นnull string?อีกทางเลือกหนึ่งถ้าการตรวจสอบความไม่ถูกต้องสำหรับ DTO นั้นเป็นสิ่งที่น่ารำคาญมากกว่าความช่วยเหลือคุณสามารถห่อประเภทใน#nullable disable/ #nullable restoreเพื่อปิด NRT สำหรับประเภทนี้เท่านั้น
#pragma warning disable CS8618ที่ด้านบนของไฟล์