• Asp.Net Core API +EF+Sqllite+Automapper+搭建后端服务 系列(三)使用autoMapper 创建Dto


    gitee:NoteList: 项目使用WPF Prism MaterialDesign WebApi 基本功能 创建任务 记录任务状态 及相关统计功能 WPF (gitee.com)

    AutoMapper是对象到对象的映射工具。在完成映射规则之后,AutoMapper可以将源对象转换为目标对象。
    一般情况下,表现层与应用层之间是通过DTO(数据传输对象Data Transfer Object)来进行交互的,数据传输对象是没有行为的POCO对象(简单CLR对象Plain Old CLR Object),他的目的是为了对领域对象进行数据封装,实现层与层之间的数据传递。为何不直接将领域对象进行数据传递?因为领域对象更注重领域,DTO更注重数据。由于“富领域模型”的特点,这样会直接将领域对象的行为暴露给表现层。
    DTO本身不是业务对象,它是根据UI需求进行设计的。简单来说Model面向业务,我们是通过业务来定义Model的。而DTO是面向UI,通过UI的需求来定义的,通过DTO我们实现了表现层与Model层之间的解耦,表现层不引用Model。如果开发过程中我们的模型变了,而界面没变,我们只需改Model而不需要去改动表现层。

    1、引入AutoMapper

    创建BaseDto继承INotifyPropertyChanged接口

    public class BaseDto : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
            public void RaisePropertyChanged([CallerMemberName] string propertyName = "")
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
    
            private DateTime createTime;
            private DateTime updateTime;
            private int id;
    
            public DateTime CreateTime
            {
                get
                {
                    return createTime;
                }
                set
                {
                    createTime = value;
                    RaisePropertyChanged();
                }
            }
    
            public DateTime UpdateTime
            {
                get
                {
                    return updateTime;
                }
                set
                {
                    updateTime = value;
                    RaisePropertyChanged();
                }
            }
    
            public int ID
            {
                get
                {
                    return id;
                }
                set
                {
                    id = value;
                    RaisePropertyChanged();
                }
            }
        }

    创建ToDoDto

    public class ToDoDto : BaseDto
        {
            private string titile;
            private string description;
            private int status;
    
            public string Titile
            {
                get => titile;
                set
                {
                    titile = value;
                    RaisePropertyChanged();
                }
            }
            public string Description
            {
                get => description;
                set
                {
                    description = value;
                    RaisePropertyChanged();
                }
            }
            public int Status
            {
                get => status;
                set
                {
                    status = value;
                    RaisePropertyChanged();
                }
            }
        }

     创建AutomapperProfile类继承Profile

     public class AutomapperProfile : Profile
        {
            public AutomapperProfile()
            {
                CreateMap<ToDo, ToDoDto>().ReverseMap();
                CreateMap<User, UserDto>().ReverseMap();
                CreateMap<Memo, MemoDto>().ReverseMap();
            }
        }

    在Startup注册AutoMapper

     //AutoMapper
                var autoMapperConfig = new MapperConfiguration(configure =>
                {
                    configure.AddProfile(new AutomapperProfile());
                });
                services.AddSingleton(autoMapperConfig.CreateMapper());
  • 相关阅读:
    [Flux] Component / Views
    [Flux] Stores
    [WebStrom] Change default cmd to Cygwin
    [AngularJS] ng-if vs ng-show
    [ES6] Array.find()
    [ES6] Array.findIndex()
    [Javascript] Object.assign()
    [Javascript] Intro to the Web Audio API
    [Falcor] Indroduce to Model
    [Farcol] Introduce
  • 原文地址:https://www.cnblogs.com/houzf/p/15936111.html
Copyright © 2020-2023  润新知