系列介绍
【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net知识等等。
5min+不是超过5分钟的意思,"+"是知识的增加。so,它是让您花费5分钟以下的时间来提升您的知识储备量。
正文
一谈到如何在.Net中进行对象映射,可能大部分同学都会脱口而出:“使用AutoMapper!”。 是的,AutoMapper 是一个非常成熟的对象映射器。截至到写这篇文章,您能在Nuget上下载到的AutoMapper包的版本为:v9.0.0,而对应的 Github 的 star 已经高达7K。
对了,谈到AutoMapper就不得不谈起它的作者(之一):“JIMMY BOGARD”。也许您没有听过这个名字,但是您一定听过他的另一个作品:MediatR(在微软的官方示例EShop中也使用了MediatR)。同时,“JIMMY BOGARD” 也是提出“将领域事件附加在聚合根”上的人,为领域驱动设计(DDD)做出了很大的贡献。在微软官方文档中,您可以看到该处提及到了“JIMMY BOGARD”:
好吧,优秀的人总是优秀😭。还是回到今天的正文,对象映射工具。当然,对于AutoMapper大家可能再熟悉不过了,而且它的知名度和热度也居高不下,看一看百度搜索结果就知道了:
然后再来看一看,咱们今天要介绍的主角:Mapster。 不知道有多少同学听过它?应该很少吧,这一点从百度搜索也可以看出来:
额………………好像差距有点大哈。而且在这些搜索结果中,有用的信息只有那么几条,其中能看的文章就只有一条,而且还是出自于博客园。 来自 “dudu” 大佬去年的一篇文章: EF Core 相关的千倍性能之差: AutoMapper ProjectTo VS Mapster ProjectToType。 再来看一看Github的情况,距离我写这一篇稿子的时候,Star数只有 518 个。
一个契机
咱们先来回顾一下AutoMapper是怎么使用的:
现在有两个类,一个叫做MyEntity ,一个叫做 MyDto。 在咱们书写应用层代码的时候,将数据转换为Dto是很常见的一种操作,所以这也是我们需要对象映射器的原因。 假设,这两个类的结构是酱紫的:
public class MyEntity
{
public string Name {
get; set; }
public int No {
get; set; }
}
public class MyDto
{
pub