心情小札:近期换了工作,苦逼于22:00后下班,房间一篇狼藉~ 小翠鄙视到:"你就适合生活在垃圾堆中!!!"

晚上浏览博客园 看到一篇非常实用的博客:.NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper,花了10分钟简单了解了一下。

看评论也是挺有价值,同时也看到许多新手同学问道在实际项目中使用的情况。

下面就原作者的代码的基础上略作调整,阐述一下在实际项目场景中的使用:

第一步:了解类库方法:TinyMapper 主要有两个函数:

   TinyMapper.Bind<T1, T2>();//绑定映射关系

   TinyMapper.Map<T>(obj);//从对象获取想要的对象

第二步:初始化Mapping设置

说明:类似的Mapping设置无非两种模式:代码静态对象初始化模式,xml配置模式,很荣幸TinyMapper支持的是静态字典。

public static class TinyMapContext
{
public static void InitMapping()
{
TinyMapper.Bind<Person, PersonDto>();
TinyMapper.Bind<Person, PersonDto>(config =>
{
config.Ignore(x => x.Id);//忽略ID字段
config.Bind(x => x.Name, y => y.UserName);//将源类型和目标类型的字段对应绑定起来
config.Bind(x => x.Age, y => y.Age);//将源类型和目标类型的字段对应绑定起来
}); TinyMapper.Bind<Person, PersonDto>(config =>
{
config.Ignore(x => x.Id);//忽略ID字段
//将源类型和目标类型的字段对应绑定起来
config.Bind(x => x.Name, y => y.UserName);
config.Bind(x => x.Age, y => y.Age);
config.Bind(x => x.Address, y => y.Address);
config.Bind(x => x.Emails, y => y.Emails);
}); TinyMapper.Bind<PersonDto,Person>();
TinyMapper.Bind<PersonDto,Person>(config =>
{
config.Bind(x => x.Id,y=>y.Id);
config.Bind(x => x.UserName, y => y.Name);
config.Bind(x => x.Age, y => y.Age);
}); TinyMapper.Bind<PersonDto,Person>(config =>
{
config.Bind(x => x.Id,y=>y.Id);//忽略ID字段
//将源类型和目标类型的字段对应绑定起来
config.Bind(x =>x.UserName,y=> y.Name);
config.Bind(x => x.Age, y => y.Age);
config.Bind(x => x.Address, y => y.Address);
config.Bind(x => x.Emails, y => y.Emails);
}); }
public static T GetMapObject<T>(object obj) where T:class
{
return TinyMapper.Map<T>(obj);
}
}

说明:以上mapping映射中,针对于原作者的代码,额外添加了:由PersonDto=》Person的映射关系。

   T GetMapObject<T>(object obj) where T:class 的作用会在后面的代码中体现出来。 简单一个方法,威力不可小嘘~~

第三步:DtoModel -》Model

从数据库模型映射到领域模型:

var p = TinyMapContext.GetMapObject<Person>(personDto);

第四步:Model-》DtoModel

从领域模型到数据库模型:

var personDto = TinyMapContext.GetMapObject<PersonDto>(person);

第五步:List<Model>=>List<DtoModel> 或者List<DtoModel>=>List<Model>

        /// <summary>
/// 测试列表对象。
/// </summary>
static void Test4()
{
List<Person> personList = new List<Person>(){
new Person
{
Id = Guid.NewGuid().ToString(),
Name = "John1",
Age = ,
Address = new Address() { Phone = "", Street = "Shanghai", ZipCode = "" },
Emails = new List<string>() { "aaa@bb.com", "acx@cc.com" }
},
new Person
{
Id = Guid.NewGuid().ToString(),
Name = "John2",
Age = ,
Address = new Address() { Phone = "", Street = "Shanghai", ZipCode = "" },
Emails = new List<string>() { "aaa@bb.com", "acx@cc.com" }
},
new Person
{
Id = Guid.NewGuid().ToString(),
Name = "John3",
Age = ,
Address = new Address() { Phone = "", Street = "Shanghai", ZipCode = "" },
Emails = new List<string>() { "aaa@bb.com", "acx@cc.com" }
},
new Person
{
Id = Guid.NewGuid().ToString(),
Name = "John4",
Age = ,
Address = new Address() { Phone = "", Street = "Shanghai", ZipCode = "" },
Emails = new List<string>() { "aaa@bb.com", "acx@cc.com" }
}
}; var personDtoList = TinyMapContext.GetMapObject<List<PersonDto>>(personList);
foreach (var item in personDtoList)
{
DebugOutputUtil.DebugOutput(item.UserName);
} var pList = TinyMapContext.GetMapObject<List<Person>>(personDtoList);
foreach (var item in pList)
{
DebugOutputUtil.DebugOutput(item.Name);
}
}

特别说明:对于获取列表类型的对象,不需要在静态初始化映射中额外添加 IList类型的对象。 TinyMapper会自动按照"映射过的基础类型"动态的帮你获取想要的数据。

本文的代码:示例

说明:代码浅显易懂,然人非完人,编码不规范的地方、手误、或代码存在缺陷、或严重性能问题,希望园友们批评指正。

.NET平台开源项目速览-最快的对象映射组件Tiny Mapper之项目实践的更多相关文章

  1. .NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper

    好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...

  2. .NET平台开源项目速览(8)Expression Evaluator表达式计算组件使用

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Expression Evaluator验证组件.那里只是概述了一下,并没有对其使用和强大功能做 ...

  3. Tiny Mapper是一个.net平台开源的对象映射组件

    NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper   阅读目录 1.Tiny Mapper基本介绍 2.Tiny Mapper 基本使用 3.Tiny Mapper 指定配置使用 ...

  4. .NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Software Protector序列号生成组件.今天就通过一篇简单的文章来预览一下其强大的功 ...

  5. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

  6. .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB

    今天给大家介绍一个不错的小巧轻量级的NoSQL文件数据库LiteDB.本博客在2013年也介绍过2款.NET平台的开源数据库: 1.[原创]开源.NET下的XML数据库介绍及入门 2.[原创]C#开源 ...

  7. .NET平台开源项目速览(2)Compare .NET Objects对象比较组件

    .NET平台开源项目速览今天介绍一款小巧强大的对象比较组件.可以更详细的获取2个对象的差别,并记录具体差别,比较过程和要求可以灵活配置. .NET开源目录:[目录]本博客其他.NET开源项目文章目录 ...

  8. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来

    从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或 ...

  9. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

随机推荐

  1. JS 实现2+2=5的代码 实现原理解析

    当我在http://segmentfault.com/q/1010000000531302 看到的时候 先是一惊. 这是代码 g = function () {   H = 3   return H ...

  2. android---APN切换

    android手机客户端在上传文件时,有时候会一直失败,其可能的原因是APN的设置.wap下的成功率极低,所以在进行文件上传时最好设置下 apn为net形式.下面是我在网上找的一些代码,是由wap转n ...

  3. Andropid自己定义组件-坐标具体解释

    在做一个view背景特效的时候被坐标的各个获取方法搞晕了,几篇抄来抄去的博客也没弄非常清楚. 如今把整个总结一下. 事实上仅仅要把以下这张图看明确就没问题了. watermark/2/text/aHR ...

  4. 关于Log4j的初始化

     1Log4j是什么 Log4j是Apache比較优秀的开源项目.在各个平台和项目中有较为广泛的应用.是为JAVA平台开发的日志管理平台.同一时候,Log4j也是JAVA开发项目中使用比較普遍的日 ...

  5. MySQL 中的两种临时表

    来源:阿里云RDS - 数据库内核组 链接:http://mysql.taobao.org/monthly/2016/06/07/ 外部临时表 通过CREATE TEMPORARY TABLE 创建的 ...

  6. Nginx模块开发入门

    前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...

  7. 加密解密知识 php非对称加密

    function test1(){ $config = array( "digest_alg" => "sha1", "private_key_ ...

  8. Android 自定义View修炼-高仿猎豹清理大师自定义内存开口圆环比例进度View

    一.概述 看见猎豹清理大师的内存开口圆环比例进度 挺有意思的,于是就是想自己实现下这样的效果,于是反编译了猎豹清理 大师的app看了下,原来是有两张图,于是脑子里就过了下思路,利用上下两张图,旋转上面 ...

  9. PHP代码实现MySQL读写分离

    关于MySQL的读写分离有几种方法:中间件,Mysql驱动层,代码控制 关于中间件和Mysql驱动层实现Mysql读写分离的方法,今天暂不做研究, 这里主要写一点简单的代码来实现由PHP代码控制MyS ...

  10. posix thread条件变量

    概述 等待条件变量总是返回锁住的互斥量. 条件变量的作用是发送信号,而不是互斥. 与条件变量相关的共享数据是“谓词”,如队列满或队列空条件. 一个条件变量应该与一个谓词相关.如果一个条件变量与多个谓词 ...