У мене є 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 в SDK "Динамо" (як і інші).
Мені здається дивним писати, public string Id { get; set; } = "";
тому що цього ніколи не станеться, оскільки Id
це ПК і ніколи не може бути нульовим. Яка користь була ""
б, навіть якби це все-таки все-таки було?
То будь-яка найкраща практика щодо цього?
- Чи повинен я відзначити їх усі,
string?
щоб сказати, що вони можуть бути недійсними, хоча деякі ніколи не повинні бути. - Повинен чи я ініціалізацію
Id
іName
з ,""
тому що вони не повинні ніколи бути порожнім , і це показує намір , навіть якщо""
ніколи не буде використовуватися. - Деякі поєднання вище
Зверніть увагу: мова йде про нульові посилання C # 8, якщо ви не знаєте, що на них краще не відповідати.
= ""
, ви можете використовувати = null!
ініціалізацію властивості, яке, як відомо, ніколи не буде ефективно null
(коли компілятор не може цього знати). Якщо це Description
може бути юридично null
, його слід оголосити а string?
. Крім того, якщо перевірка нульовості для DTO викликає більше клопоту, ніж допомога, ви можете просто загорнути тип #nullable disable
/ #nullable restore
вимкнути NRT тільки для цього типу.
#pragma warning disable CS8618
вгорі файлу.