ฉันมี 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
ที่ด้านบนของไฟล์