我有一个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
}
有没有针对这个问题的最佳实践?我宁愿避免使用非参数化构造函数,因为它与Dynamo SDK(以及其他ORM)不兼容。
对我来说,写
public string Id { get; set; } = "";
似乎很奇怪,因为这永远不会发生,因为Id
是主键,永远不可能为空。即使它以某种方式出现,""
有什么用呢?那么有没有任何最佳实践呢?
- 我应该将它们全部标记为
string?
,表示它们可以为空,即使有些永远不应该为空。
- 我应该使用""
初始化Id
和Name
,因为它们永远不应该为空,并且这显示了意图,即使""
永远不会被使用。
- 上述两者的某种组合请注意:这是关于C#8的nullable reference types,如果您不知道它们是什么,则最好不要回答。
=""
,而是可以使用=null!
来初始化一个属性,这样你就知道它永远不会实际上为空(当编译器无法知道时)。如果Description
可能为null
,那么应该声明为string?
。或者,如果DTO的空值检查更令人困扰而不是有帮助的话,你可以简单地将该类型用#nullable disable
/#nullable restore
包装起来,以仅关闭此类型的NRTs。 - Jeroen Mostert