• ABP之应用服务(2)


    在上一篇的笔记中,已经大致对Application层的使用作了简要的使用说明,感觉还是有些东西需要研究一下,所以承接上文,对AutoMapper这个方便的东西,稍微研究一下。

    一.初识AutoMapper

    首先使用一个简单的控制台应用程序,测试一下AutoMapper。我们使用nuget将AutoMapper的库引入到我们的项目中就可以使用了。

    运行一下

    上面的代码实现了从List<Book>到List<BookDto>的映射。

    从上面的标注中可以看出使用AutoMapper 的关键点:

    1. 创建映射规则,上面我创建了从Book到BookDto的单向映射

    2. 使用映射

    问题来了,上面的代码只是实现了最简单的映射关系,就是相同名字的Model和Dto之间的映射,此时的Msg是没有值的,如果我想将Book中的BookName的值赋值给Msg,怎么办呢,那么这里就需要定制我们自己的映射规则了。只要将代码稍微修改一下就好了

    从上面的代码中可以看出我们使用的都是Mapper的静态方法,虽然很方便,但是依赖性比较强,那么有没有使用实例方法的方式呢?

    二.ABP中的AutoMapper 

    (1) 在ABP中集成了AutoMapper,封装了AutoMapper中的方法,都是进行了相应的扩展,比如MapTo。在ABP中定义映射规则的方式总体来说两种。

         1.使用特性标签AutoMap、AutoMapTo、AutoMapFrom,这种方式的缺点就是不方便自定义规则,只能使用默认的规则

    在这里稍微插一句,如果Dto的字段与Model中的字段完全对应,命名完全相同,没有多余的字段,其实不打特性标签,也是可以直接调用映射API实现映射的,但是还是强烈建议一定要定义映射规则的,因为你的Dto并不是一直都是完全对应的。

          2.使用API的方式定义映射规则。

        (1)在ABP Zero中对映射规则进行统一的管理,减少耦合性

        (2)在Abp免费的模板框架中可以使用Profile的方式,实现自定义规则的创建。

          在模板中为我们创建的User中找到了这个profile

     

     

    所以我们按照User中给出的代码,我们可以将特性标签去掉了,编写我们自己的MapFile,比如这样:

    运行也是OK的

    (2)映射API的调用

    在ABP中,我们即可以使用AutoMapper原生的API实现模型和Dto之间的映射,也可以使用Abp.AutoMapper中为我们封装的API,同时还可以使用ObjectMapper.

     

    在原生的AutoMapper中有一种方式是使用实例化一个Map对象的方式,创建映射规则。ObjectMapper就是通过依赖注入的方式注入的一个用来创建映射规则的Mapp实例对象,这个属性是在ApplicationService的顶级父类AbpServiceBase中定义的。

    使用ObjectMapper的好处,也是显而易见的,可以减少对AutoMapper的耦合性,方便我们进行单元测试。

  • 相关阅读:
    2016年 IT 趋势大预测!
    怎样创建合适的告警处理流程?
    如何解决 Java 安全问题?
    程序员:如何成为一个全栈的工程师?
    安全防护:你是否正在追逐一个不可能实现的目标?
    如何使用 Python 创建一个 NBA 得分图?
    如何对 Android 库进行依赖管理?
    减少 WAF 漏报的 8 种方法 !
    第69节:Java中数据库的多表操作
    第69节:Java中数据库的多表操作
  • 原文地址:https://www.cnblogs.com/XZhao/p/8365259.html
Copyright © 2020-2023  润新知