Dto 数据传输层
Dto这一层是作为Controller层和Services层的传输数据类存放层。包含Requests和Dtos。
Dtos
在Dtos文件夹下,建立对应领域的文件夹,将对应领域的Dto类放在这里面。
Dto应该完全隔离于数据库的类,没有特殊情况,不允许包含IsDeleted
,CreateTime
,UpdateTime
等数据库字段。可以理解为业务和服务用的传输数据类。
Dto一般体现为对应领域的具体实体,一般有以下几种
- XXXDto,这种表现为对应领域的详情Dto
- XXXListDto,这种表现为对应领域的列表Dto,相比详情字段可能更少,在部分情况下的列表接口可以不建立ListDto直接返回Dto
- XXXAggregateDto,聚合根Dto,常见与多个业务领域聚合的情况,在聚合根下同时存在其他的Dto引用。就比如客户下同时存在地址的Dto和账户的Dto。
///患者信息,聚合根(患者)
public record PatientInfoAggregateDto
{
/// <summary>
/// 病人
/// </summary>
public long PatientSeq { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonNameCn { get; set; }
/// <summary>
/// 居住地址,聚合信息
/// </summary>
public PatientAddressDto LocalAddress { get; set; }
/// <summary>
/// 籍贯地址,聚合信息
/// </summary>
public PatientAddressDto NativeAddress { get; set; }
/// <summary>
/// 户口地址,聚合信息
/// </summary>
public PatientAddressDto RegisteredAddress { get; set; }
/// <summary>
/// 出生地址
/// </summary>
public PatientAddressDto BirthAddress { get; set; }
/// <summary>
/// 患者社会关系,聚合信息
/// </summary>
public List<PatientRelationshipDto> patientRelationshipsList { get; set; }
...
}
Requests
在Requests文件夹下,建立对应领域的文件夹,将对应领域的Dto类放在这里面。
与Dtos不同,Requests只需要关注具体方法即可,具体命名为XXXRequest
,即方法名+Request。
- 注意
Request
是record
- 使用
init
而不是set
,防止前端数据被篡改 - 在记录下方建立对应的参数验证器,命名为
XXXRequestValidator
,具体参数验证方式参考FluentValidation验证器 - 入参应该是完全隔离于数据库的类,没有特殊情况,不允许传入像是
IsDeleted
,CreateTime
,UpdateTime
等数据库字段。可以理解为业务用的请求类。
public record CreateAccessPartyRequest
{
/// <summary>
/// 应用名称
/// </summary>
public string AppName { get; init; }
/// <summary>
/// 应用地址
/// </summary>
public string AppUrl { get; init; }
/// <summary>
/// 应用IP地址
/// </summary>
public string IPAddress { get; init; }
/// <summary>
/// 应用描述
/// </summary>
public string Description { get; init; }
/// <summary>
/// 是否启用
/// </summary>
public bool IsEnabled { get; init; }
}
public class CreateAccessPartyRequestValidator : AbstractValidator<CreateAccessPartyRequest>
{
public CreateAccessPartyDtoValidator()
{
RuleFor(x => x.AppName).NotEmpty().WithMessage("应用名称为必填项。");
}
}