Automapper.js 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Automapper.js 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Automapper.js 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Automapper.js 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Automapper.js 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 MIT
开发语言 JavaScript
操作系统 跨平台
软件类型 开源软件
开发厂商
地区 国产
提 交 者 百小僧
适用人群 未知
收录时间 2018-03-22

软件简介

在C#项目开发中,我们经常需要很多对象模型,如视图模型、传输模型、领域模型、实体模型等,我相信很多开发的朋友都明白最头疼的无法使模型之间的赋值,传统的方法就是一一赋值。终于春天来了,AutoMapper 的出现让我们解放了,各种映射完全秒秒钟的事情。

最近在Javascript开发过程中也遇到了相同的需求,果断 github 搜索一番,纳尼?没有!!!没办法,谁叫我是代码工呢,果断撸一把,不一会,automapper.js 诞生了。

使用文档

<script src="automapper.js" type="text/javascript"></script>
  • 示例演示

// # 示例一

var srcObj = { name: "百小僧", age: 25, gender: '男' }; // 源类型
var destObj= { name: null, age: null, gender: null };   // 目标类型

// 创建映射关系
automapper.createMap("src","dest");
// 开始映射
automapper.map("src","dest",srcObj,destObj);
// 输出结果:
// srcObj => { name: "百小僧", age: 25, gender: '男' }
// destObj => { name: "百小僧", age: 25, gender: '男' }


// # 示例二

var srcObj = { name: "百小僧", age: 25, gender: '男' }; // 源类型
var destObj = { firstName: null, age: null, sex: null, birthday: null };    // 目标类型

// 创建映射关系
automapper.createMap("src", "dest")
    .forMember("firstName", function (src, dest) { return "Mr." + src.name })
    .forMember("sex", srcObj.gender)
    .forMember("birthday", '1993-05-27');
// 开始映射
automapper.map("src", "dest", srcObj, destObj);
// 输出结果:
// srcObj => { name: "百小僧", age: 25, gender: '男' }
// destObj => {firstName: "Mr.百小僧", age: 25, sex: "男", birthday: "1993-05-27"}


automapper.js 目前还是第一版,实现代码也非常简单

; !function (win) {
    "use strict";

    var AutoMapper = function () {
        this.profiles = {};
        this.version = '1.0.0';
    };

    AutoMapper.prototype.createMap = function (srcKey, destKey) {
        var that = this, combineKey = srcKey + "->" + destKey;
        if (!that.profiles.hasOwnProperty(combineKey)) that.profiles[combineKey] = {};

        var funcs = {
            forMember: function (prop, any) {
                that.profiles[combineKey][prop] = any;
                return funcs;
            }
        };
        return funcs;
    };

    AutoMapper.prototype.map = function (srcKey, destKey, srcObj, destObj) {
        var that = this, combineKey = srcKey + "->" + destKey;
        if (!that.profiles.hasOwnProperty(combineKey)) throw "Could not find mapping with a source of " + srcKey + " and a destination of " + destKey;

        var profile = that.profiles[combineKey];
        for (var prop in destObj) {
            if (!profile.hasOwnProperty(prop)) destObj[prop] = srcObj.hasOwnProperty(prop) ? srcObj[prop] : destObj[prop];
            else {
                var output = profile[prop];
                if (typeof output === "function") destObj[prop] = output(srcObj, destObj);
                else destObj[prop] = output;
            }
        }
    };

    win.automapper = new AutoMapper();
}(window);
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (2)

加载中
挺实用的东西
2018/04/03 17:01
回复
举报
百小僧软件作者
打分: 力荐
支持一下。
2018/03/22 11:16
回复
举报
更多评论
暂无内容
发表于服务端专区
2014/06/13 10:28

AutoMapper

忘了加映射的builder的部分,稍后加上

3
1
发表了博客
2019/04/04 11:20

Automapper

一、AutoMapper 说明:Automapper是一个object-object mapping(对象映射)工具,一般主要用于两个对象之间数据映射和交换。 二、安装程序集包 1、程序包管理控制台方式 Install-Package AutoMapper 2、Nuget方式 三、实体映射 1、两个实体之间的映射 using AutoMapper; using System; namespace ConsoleApp1 { ...

0
0
发表了博客
2018/07/06 11:01

AutoMapper的使用

一、为什么要用AutoMapper   AutoMapper是一个 对象 - 对象映射器 。对象 - 对象映射的工作原理是将一种类型的输入对象转换为另一种类型的输出对象。   一个项目分多层架构,如UI层、业务逻辑层、服务层、数据访问层。层与层访问需要数据载体,也就是类。如果多层通用一个类,一则会暴露出每层的字段,二者会使类字段...

0
0
发表了博客
2018/01/10 12:32

AutoMapper简介

先说说DTO DTO是个什么东东? DTO(Data Transfer Object)就是数据传输对象,说白了就是一个对象,只不过里边全是数据而已。 为什么要用DTO? 1、DTO更注重数据,对领域对象进行合理封装,从而不会将领域对象的行为过分暴露给表现层 2、DTO是面向UI的需求而设计的,而领域模型是面向业务而设计的。因此DTO更适合于和表现...

0
0
发表了博客
2018/05/02 10:03

How to use AutoMapper

http://docs.automapper.org/en/stable/Getting-started.html IMappingExpression<TSource, TDestination> CreateMap<TSource, TDestination>(MemberList memberList); Mapper.Initialize(cfg => cfg.CreateMap<Order, OrderDto>()); //or var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderDto>(...

0
0
发表了博客
2018/07/02 13:34

.NetCore 使用AutoMapper

添加引用 AutoMapper AutoMapper.Extensions.Microsoft.DependencyInjection 注册服务 services.AddAutoMapper(); 配置映射 services.AddAutoMapper(); 中DI了AutoMapper中需要用到的服务,其中包括AutoMapper的配置类 Profile 那么怎么来使用这个Profile,只需要自定义一个类 继承 Profile 即可,在构造函数中配置下映射...

0
0
发表了博客
2018/01/08 19:00

AutoMapper 使用总结

初识AutoMapper 在开始本篇文章之前,先来思考一个问题:一个项目分多层架构,如显示层、业务逻辑层、服务层、数据访问层。层与层访问需要数据载体,也就是类。如果多层通用一个类,一则会暴露出每层的字段,二者会使类字段很多,而且会出现很多冗余字段,这种方式是不可取的;如果每层都使用不同的类,则层与层调用时,...

0
0
发表了博客
2018/12/13 16:01

AutoMapper学习笔记

进入公司后学习到的东西,之前记录在github上 现在搬运过来 AutoMapperDemo 需要安装两个包 AutoMapper AutoMapper.Extensions.Microsoft.DependencyInjection //需要依赖注入AutoMapper,需要下载该包。 在Startup中添加AutoMapper: public void ConfigureServices(IServiceCollection services) { //添加对AutoM...

0
0
发表于开发技能专区
2020/05/03 08:10

AutoMapper 使用实践

一. 使用意图 常常在开发过程中,碰到一个实体上的属性值,要赋值给另外一个相类似实体属性时,且属性有很多的情况。一般不利用工具的话,就要实例化被赋值实体B,然后再将实体A的字段一个个赋值给B的属性,单单写...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
2 评论
4 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部