Mam DTO, który jest wypełniany przez czytanie z tabeli DynamoDB. Powiedzmy, że obecnie wygląda to tak:
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
}
Czy istnieją jakieś najlepsze praktyki dotyczące radzenia sobie z tym? Wolałbym unikać nieparametrycznego konstruktora, ponieważ źle działa on z ORM w zestawie Dynamo SDK (podobnie jak inne).
Wydaje mi się dziwne pisanie, public string Id { get; set; } = "";
ponieważ to się nigdy nie wydarzy, ponieważ Id
jest to PK i nigdy nie może być zerowe. Jaki byłby użytek, ""
gdyby tak się stało?
Więc jakaś najlepsza praktyka w tym zakresie?
- Czy powinienem zaznaczyć je wszystkie,
string?
aby powiedzieć, że mogą być zerowe, chociaż niektórzy nigdy nie powinni. - Powinienem zainicjować
Id
i zaName
pomocą,""
ponieważ nigdy nie powinny być zerowe, a to pokazuje zamiar, chociaż""
nigdy nie zostanie użyty. - Niektóre kombinacje powyższych
Uwaga: chodzi o typy zerowalne C # 8. Jeśli nie wiesz, co najlepiej, nie odpowiadaj.
= ""
możesz użyć = null!
do zainicjowania właściwości, o której wiesz, że nigdy tak naprawdę nie będzie null
(gdy kompilator nie ma możliwości, aby to wiedzieć). Jeśli jest Description
to zgodne z prawem null
, należy je zadeklarować string?
. Alternatywnie, jeśli sprawdzanie zerowości dla DTO jest bardziej uciążliwe niż pomoc, możesz po prostu owinąć ten typ w #nullable disable
/, #nullable restore
aby wyłączyć NRT tylko dla tego typu.
#pragma warning disable CS8618
w górną część pliku.