我应该为创建和更新分别使用不同的DTO吗?(CRUD)

17 浏览
0 Comments

我应该为创建和更新分别使用不同的DTO吗?(CRUD)

我正在设计一个具有常规CRUD操作的Web API,用于对Person实体进行操作。

问题在于我不知道如何设计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是由创建操作本身生成的,因此在DTO中包含Id与语义不符。

我应该创建两个不同的DTO,一个带有Id,另一个不带Id吗?

最佳选择是什么?您是否为创建和更新使用不同的DTO?

0
0 Comments

问题的出现原因:

这个问题的出现是因为在进行创建(Create)和更新(Update)操作时,对于传输对象(DTO),有人在想是否需要为每个操作都使用不同的DTO。有人认为只需要在创建操作中设置默认值(id=0),而不需要额外使用一个DTO。但是有人对于Web API的Create操作接受一个id参数感到困惑,因为实际上这个id参数会被忽略。

解决方法:

对于创建操作,不需要使用另一个DTO,只需要为新对象设置默认值(id=0)。这样可以在需要时确定对象是否已经在数据库中创建。尽管如此,如果将具有id为零的DTO传递给用于创建操作的方法,也不会出现任何问题。

对于Web API请求,不需要发送id参数,只需要发送{"Name"="string", "Age"=0}即可。在C#中,0会被默认赋值。这不会对你产生困扰,因为0不是一个有效的id。

在这个问题中,还提到了对API的消费者的问题,但是需要进一步查看。

0
0 Comments

在进行CRUD操作时,我们可以选择使用不同的DTO(数据传输对象)来处理创建和更新操作。使用不同的DTO可以带来一些好处,但同时也会增加代码的编写量和时间的消耗。有些人更倾向于使用一个DTO来处理所有操作,并在需要时创建额外的DTO。

为了解决这个问题,我们可以考虑以下两种方法:

1. 使用不同的DTO来处理创建和更新操作:这种方法可以使代码更加清晰和可读。通过使用不同的DTO,我们可以根据操作的不同来定义不同的字段和逻辑。这种方式可以确保在处理不同操作时不会出现错误或冲突。但是,使用不同的DTO会增加代码的编写量,并且可能需要更多的时间来维护和更新。

2. 使用一个DTO来处理所有操作,并在需要时创建额外的DTO:这种方法可以减少代码的编写量和时间的消耗。通过使用一个通用的DTO,我们可以避免重复编写相似的代码,并且可以更容易地维护和更新。当需要处理特定操作时,我们可以创建一个额外的DTO来处理特定的字段和逻辑。这种方式可以在保持代码简洁的同时,还可以处理不同操作的需求。

使用不同的DTO来处理创建和更新操作有其优缺点。选择哪种方法取决于具体的需求和团队的偏好。无论选择哪种方法,我们都需要确保代码的可读性和可维护性,并根据实际情况来灵活应对。

0