ABP(3) - 使用Dto - 官方教程掃盲貼之Dto的使用 (詳細解說)


今天的目標

  • 1 學會使用Dto
  • 2 了解Dto的用法
  • 3 學着使用AutoMapper

1 添加 BookDto, 帶着問題來學習

Acme.BookStore.Application.Contracts 項目中創建一個名為 BookDtoDTO 類:
using System;
using Volo.Abp.Application.Dtos;

namespace Acme.BookStore
{
    public class BookDto : AuditedEntityDto<Guid>
    {
        public string Name { get; set; }

        public BookType Type { get; set; }

        public DateTime PublishDate { get; set; }

        public float Price { get; set; }
    }
}

2 Dto的映射, 我們如何知道Dto是和哪個實體映射的. 啟動模板配置了 AutoMapper, 這樣我們就可以使用 CreateMap 方法來進行映射.

需在 Acme.BookStore.Application 項目的 BookStoreApplicationAutoMapperProfile 類中定義映射:
using AutoMapper;

namespace Acme.BookStore
{
    public class BookStoreApplicationAutoMapperProfile : Profile
    {
        public BookStoreApplicationAutoMapperProfile()
        {
            CreateMap<Book, BookDto>();
        }
    }
}

3 創建用於更新的Dto, 這里可以看到更新的Dto中,增加了很多驗證, 必填(Required), 長度(StringLength).

using System;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.AutoMapper;

namespace Acme.BookStore
{
    public class CreateUpdateBookDto
    {
        [Required]
        [StringLength(128)]
        public string Name { get; set; }

        [Required]
        public BookType Type { get; set; } = BookType.Undefined;

        [Required]
        public DateTime PublishDate { get; set; }

        [Required]
        public float Price { get; set; }
    }
}

4 再次增加映射關系

using AutoMapper;

namespace Acme.BookStore
{
    public class BookStoreApplicationAutoMapperProfile : Profile
    {
        public BookStoreApplicationAutoMapperProfile()
        {
            CreateMap<Book, BookDto>();
            CreateMap<CreateUpdateBookDto, Book>(); //<--added this line-->
        }
    }
}

5 總結

  • 1 什么是Dto? 數據傳輸對象(DTO)(Data Transfer Object),是一個以不具有任何行為除了存儲和檢索的數據(訪問和存取器)。
  • 2 Dto的作用? 為何不直接使用實體對象. 最大的好處是Dto不會像實體一樣暴露出所有的屬性, 比如createby, createdate 這些字段,並不需要前端處理, 這樣就能盡量的減少出錯的機會,也非常安全. 比如只允許更新一個字段,那dto就只有一個字段,這樣想更新其他的都做不到.
  • 3 ABP已經集成了AutoMapper, 按照官方文檔使用即可
  • 4 計划做一個AutoMapper番外篇,如何使用AutoMapper


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM