我应该为创建和更新设置不同的 DTO 吗? (增删改查)

Should I have different DTOs for Create and Update? (CRUD)

我正在设计一个 Web API,其中包含对 Person 实体的常规 CRUD 操作。

问题是我不知道如何设计DTO。

实体如下:

public class Person 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

我确定 DTO 应该有完全相同的成员:

public class PersonDto 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age{ get; set; }
}

这对于更新操作是有意义的,但是对于创建呢? Id 是由 Create 操作 ifself 创建的,因此在 DTO 中有一个 Id 不符合语义。

我是否应该创建 2 个不同的 DTO,一个有 Id,另一个没有 Id?

最好的选择是什么?您是否有用于创建和更新的不同 DTO?

您可以使用任何一种方式。如果您为每个操作使用单独的 DTO - 这会导致大量代码编写(和时间花费)。我更喜欢对所有操作使用一个 DTO,并在需要时创建其他 DTO。

创建操作不需要另一个 DTO。您只需设置默认值 (id=0) 即可创建新对象。这将帮助您确定是否尚未在数据库中创建对象,以防万一。但是,如果您将 ID 为零的 DTO 传递给用于创建操作的方法,您将永远不会遇到任何问题。