美文网首页
ABP 中 DTO 的注意事项

ABP 中 DTO 的注意事项

作者: 寻找无名的特质 | 来源:发表于2020-12-14 06:18 被阅读0次

DTO负责表示层和应用层之间的数据传递,需要定义在应用层,建议定义在Application.Contracts项目中,这样可以将应用的具体实现和定义分开。

DTO在应用层项目的ApplicationAutoMapperProfile中定义与领域实体之间的映射关系,需要注意的是,如果DTO中包含领域实体中不一致的属性,需要忽略,比如:

    public class ProductStoreApplicationAutoMapperProfile : Profile
    {
        public ProductStoreApplicationAutoMapperProfile()
        {
            CreateMap<Category, CategoryDto>();
            CreateMap<Product, ProductWithDetailsDto>().Ignore(p=>p.Categories);
        }
    }

DTO必须能够序列化,因为在传输时需要转换为JSON。如果DTO带有参数的构造函数,那么推荐定义一个无参数的公开构造函数。

对于输入DTO,应该为每个用例创建一个类型的DTO,比如针对创建需要有CreateCategoryDto,对于更新,需要有UpdateCategoryDto。即使两个用例的输入完全相同,仍然建议创建不同类型的DTO,避免混淆。

对于输出DTO,如果可以确保所有的属性都能够返回,可以在不同用例中使用相同的DTO。这一点非常重要,特别是对于聚合根来说,可能包含关联实体的集合,如果某些用例下,没有填充这些关联的集合(比如返回列表),那么编写客户端的开发人员在访问这些集合时就无法获取正确的数据。这种情况下,就需要定义不同的DTO,比如ProductWithDetailsDto用于返回详细信息,ProductDto用户返回基本信息。

相关文章

  • ABP 中 DTO 的注意事项

    DTO负责表示层和应用层之间的数据传递,需要定义在应用层,建议定义在Application.Contracts项目...

  • ABP 中的 DTO

    ABP的数据传输对象(DTO)负责表示层和应用层之间的数据传递,在应用层中,领域对象会被映射为DTO,返回表示层,...

  • ABP 中 DTO的类型

    与实体相关的DTO需要实现接口IEntity,ABP中有针对实体DTO的基类EntityDto,比如:...

  • ABP:后台验证多语言

    目的 ABP已经封装好了一套DTO的验证机制,如果DTO数据不符合,ABP会自动弹窗显示错误信息。但是这样有个限制...

  • 使用AbpHelper.Gui生成代码

    开发ABP应用时很大一部分工作量在于创建领域实体相关的仓储、DTO、权限声明、以及用户界面等等,很多工作是简单重复...

  • 运行Abp Vnext 微服务示例

    abp vnext的微服务https://docs.abp.io/en/abp/latest/Samples/Mi...

  • 4.nestjs:请求入参校验

    在整合swagger中,虽然入参虽然使用了dto,但是我们使用instanceof发现它并不是我们dto的inst...

  • Abp.Core中扩展和使用AbpSession

    Abp.Core中扩展和使用AbpSession的方法 在自己的项目中,使用了Abp框架,但却没有采用原...

  • ABP 基于DDD的.NET开发框架

    ABP总体介绍 ABP是ASP.NET Boilerplate Project,ASP.NET样板项目。 ABP框...

  • 映射框架MapStruct

    一、MapStruct 开发中,我们经常需要将PO转DTO、DTO转PO等一些实体间的转换。比较出名的有BeanU...

网友评论

      本文标题:ABP 中 DTO 的注意事项

      本文链接:https://www.haomeiwen.com/subject/oondgktx.html