IN 和 OUT DTO 有命名约定吗?

Rod*_*rez 13 c# api naming dto viewmodel

如果我必须使用 MVC 架构创建某种 API,我就必须为控制器接收的 DTO 和控制器生成的 DTO 确定命名约定,是对的吗?

\n

例如,给出以下代码:

\n
public class InStudentDTO\n{\n    public int Id { get; set; }\n    public List<int> Grades { get; set; }\n}\n\npublic class OutStudentDTO\n{\n    public int Id { get; set; }\n    public bool HasApprovedCourse { get; set; }\n}\n\n[HttpPost]\npublic OutStudentDto StudentHasApprovedCourse(InStudentDto dto)\n{\n    OutStudentDto outStudentDto = _someService.CalculateStudentApprovedCourse(dto);\n    return outStudentDto;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这只是一个愚蠢的示例,但要点是我想在具有该属性的服务内执行一些计算List<int> Grades,并且稍后不在控制器的输出上显示它。因此,据我了解,我应该创建一个全新的 DTO,但不会公开该List<int> Grades属性,对吗?如果是这样,这个“生成的 DTOs\xc2\xa8”的正确命名约定如何?或者应该将它们命名为 Viewmodels?

\n

谢谢!

\n

Dai*_*Dai 18

命名 DTO 类型没有单一的标准或命名约定,因为这是一个实现问题 - 我也不知道 ASP.NET Web API 团队认可任何特定约定(也有很多使用实际实体框架实体的糟糕示例 -在官方 ASP.NET 文档中将类型作为 DTO(出于多种原因不要这样做- 除非您知道自己在做什么)。

然而,我注意到 .NET 开发人员社区中的一个普遍趋势是“In”DTO(如您所称)通常被命名,${ResourceName}Request而“out”输出/响应 DTO 也经常被命名${Resource/Action}Response- 将“ Dto”作为类型名称后缀。

然而,当涉及到命名约定和编码风格时,一致性通常比“正确”更重要 - 因此,如果您现有的项目使用Dto后缀,那么就这样做,但如果您的项目使用后缀,然后不要开始使用后缀(没有充分的理由)。

另外,请避免使用不明确的名称,例如Id- 使用全名 ( StudentId)。

以我的主观意见,考虑到你的例子,我会这样命名它们:

public class StudentCourseApprovalRequestDto
{
    public int       StudentId { get; set; }
    public List<int> Grades    { get; set; }
}

public class StudentCourseApprovalResponseDto
{
    public int  StudentId         { get; set; }
    public bool HasApprovedCourse { get; set; }
}

[HttpGet]
public StudentCourseApprovalResponseDto StudentHasApprovedCourse( StudentCourseApprovalRequestDto req )
{
    StudentCourseApprovalResponseDto resp  = _someService.CalculateStudentApprovedCourse( req );
    return resp;
}
Run Code Online (Sandbox Code Playgroud)

  • @Dai“我注意到了一个总体趋势”不是来源。他们明确询问您是否可以指出实现您提到的这一趋势的任何具体帖子/存储库/文件。如果没有,那也没关系,答案是否定的。你没必要为此感到讨厌。 (2认同)