ABP学习笔记:对象映射

85 篇文章 0 订阅
博客探讨了在后端代码中如何使用AutoMapper库进行对象之间的自动映射,以减少重复和繁琐的手动映射工作。作者通过示例展示了在创建和更新用户时如何利用AutoMapper简化代码,并分享了对映射功能的进一步思考,指出在对象属性相同的情况下,映射的重要性在于确保类型正确避免错误。
摘要由CSDN通过智能技术生成

拉到最下面,有最新的思考。

最近task都做完了,TL开始让我熟悉后端代码了,看到别人create接口有个autoMap很好奇。今天写个博客记录一下用法。

先上参数,3个 接受数据的类型,映射数据的类型,数据源

将相似的对象映射到另一个对象是很常见的。这也是乏味和重复的,因为一般两个对象(类)可能具有相似的/相同的属性映射到彼此。想象在一个典型的应用服务的方法:

public class UserAppService : ApplicationService
{
    private readonly IRepository<User> _userRepository;

    public UserAppService(IRepository<User> userRepository)
    {
        _userRepository = userRepository;
    }

    public void CreateUser(CreateUserInput input)
    {
        var user = new User
        {
            Name = input.Name,
            Surname = input.Surname,
            EmailAddress = input.EmailAddress,
            Password = input.Password
        };

        _userRepository.Insert(user);
    }
}

createuserinput是一个简单的DTO和用户这是一个简单的实体。我们从给定输入手动创建了一个用户实体。用户实体在实际应用程序中具有更多的属性,手工创建它将变得单调乏味,容易出错。同时,我们应该改变映射的代码时,我们要对用户和createuserinput添加新的属性。

我们可以使用一个库来自动绘制这个映射。AutoMapper是一个对象到对象的映射最好的库。ASP.NET的模板定义iobjectmapper接口抽象和实现这个接口使用AutoMapper Abp.AutoMapper包。

public class UserAppService : ApplicationService
{
    private readonly IRepository<User> _userRepository;
    private readonly IObjectMapper _objectMapper;

    public UserAppService(IRepository<User> userRepository, IObjectMapper objectMapper)
    {
        _userRepository = userRepository;
        _objectMapper = objectMapper;
    }

    public void CreateUser(CreateUserInput input)
    {
        var user = _objectMapper.Map<User>(input);
        _userRepository.Insert(user);
    }
}

map是获取源对象并创建一个新的目标对象的简单方法,该对象声明为泛型参数(本示例中的用户)。映射方法具有将对象映射到现有对象的重载。假设我们已经有一个用户实体,并且想通过对象更新它的属性:

public void UpdateUser(UpdateUserInput input)
{
    var user = _userRepository.Get(input.Id);
    _objectMapper.Map(input, user);
}

ABP框架系列之四十二:(Object-To-Object-Mapping-对象映射) - 斗哥哥 - 博客园

2022/4/27 

今天对于映射的再次思考🤔

起因是这样的,如果两个对象都是一样的属性一样的值,如果不使用映射呢?直接把原对象传进去不久可以了嘛?

想了半天。。。回去把代码翻来覆去看了看。。。终于搞明白了。

举个例子, 函数A只接受FirstTypeDTO类型的数据

function A(FisrtTypeDTO){
  ...
}

这时候接口传回来的值,不是此类型,但是属性和FirstTypeDTO一模一样。

class FirstTypeDTO{
    Prop1{
        get;set;
    }
}

class SecondTypeDTO{
    Prop{
        get;set;
    }    
}

主函数体内,某函数只接受FirstTypeDTO类型,那么就需实现对象映射,从SecondTypeDTO到FirstTypeDTO,这样就不会出错。

2022/4/29 新的思考

明天就是五一了,今天把源码看一下。最常用的。

 看了看项目里的代码,发现形式参数的TSource可以省略。。。不看一下源码我还真是有点懵逼。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董厂长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值