【问题标题】:Using DataAnnotations in the entitie is necessary when already using in Dto members?已经在 Dto 成员中使用时,是否需要在实体中使用 DataAnnotations?
【发布时间】:2022-08-02 23:59:51
【问题描述】:

例如,如果我请求的不是Item,而是CreateItemDto,它不仅具有Id 属性,我是否应该在Title 属性中使用DataAnnotations,如[Required] Item 类?因为它将在CreatedItemDto 中传递,使用[Required] 数据注释。

物品记录:

public record Item
{
    public Guid Id { get; init; }
    public string? Title { get; init; }
}

CreateItemDto 记录:

public record CreateItemDto
{
    public Guid Id { get; init; }
    
    [Required]
    [Range(1, 20)]
    public string? Title { get; init; }
}

在我的控制器中,类似的东西会采取它:

[HttpPost]
ActionResult<ItemDto> Create(CreateItemDto item)
{
    var newItem = new Item() { Guid = Guid.NewGuid(), Title = item.Title };
    return CreatedAtAction(nameof(Get), new { id = newItem.Id }, newItem );
}
  • 这取决于几件事,但通常如果您的 DTO 使用注释有效,那么您可以假设进入数据库的数据是有效的,前提是您的数据库没有任何额外的验证,数据库不喜欢在您可能错过的地方不允许空值等从 dto 中取出验证。

标签: c# asp.net asp.net-mvc rest dto


【解决方案1】:

取决于您使用的方法。

如果你有一个单一的端点来操作对象,我认为 DTO 验证足以达到游览目标。但是,如果项目增长,上下文没有很好地定义,或者您正在与团队中的其他人一起工作,则可以在应用程序的其他地方实例化域对象。 在我目前的团队中,对我们有用的是在业务规则之前在域服务中进行域对象验证。

在我看来,这种方法将取决于每个团队的场景,因此值得进行一些测试以了解满足您的需求并找到适合每个人的模式。

【讨论】:

    猜你喜欢
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2010-10-07
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多