什么是.NET

  有一次小飞去面试,面试官上来就问了一个宏观的问题:“你觉得什么是.NET”?小飞的脑子嗡嗡的,支吾了半天,才吐了一些碎片化的词语:“跨平台、开源、微软…”

虽然作为一个.NET人,但是小飞更喜欢编码细节,对理论这一类不是很感兴趣,比如.NET历史枷锁、什么是.NET等。一个源于技术更新发展太快,另外一个原因是小飞觉得技术以实用为主,聊这些虚头巴脑的理论没有什么用。

考官点评了:“你对.NET缺乏基本的了解,作为.NET技术的运用者,对问题缺少刨根问底的思考,我们要招聘的是面向未来,有系统性思维的人。”

面试让小飞很受挫,于是他去找小黑,一个.NET方面的老司机。

“小黑,你在.NET这方面比较资深,到底什么是.NET呢?”

小黑知道小飞比较好学:“小飞,你先不用难过,这次面试反过来也是对自己知识的查缺补漏。”小黑一边安慰,一边回答道:“你可以这么思考,假如你是微软的产品经理,你会如何规划.NET呢?”

小飞摇摇头:“我只是一个菜鸟,初出江湖,哪里有这个高度。”

小黑道:“嗯,没关系,就是一个思考角度罢了。你可以这么思考,微软就像一个主厨,做了一桌满汉全席,上面有八大菜系:有网页,移动,桌面,微服务,游戏,机器学习,云原生,物联网。”

“微软不但提供桌子这个平台,而且上面的每道菜系怎么做,用什么材料做,如何打样都提供了周到的说明。更贴心的是,微软对开源社区说:我的满汉全席大家随便吃,随便拿,不要钱,因为我采用的是最宽松的MIT协议。”

小飞:“我知道以前很多人对微软帝国有很多偏见,都说微软不开源。”

小黑:“这次微软是真的放下架子,彻底拥抱开源了。”

小飞对大厨的比喻很深刻,不禁念叨:“.NET、满汉全席,八大菜系,各具特色,不要钱。”

小黑看到小飞碎碎念,就帮他做了一个概括:“是的,.NET是一个可构建各种应用(八大菜系)的跨平台的开源的开发平台。”

小黑继续展开解释道:“构建各种应用,说明.NET具有多面手的能力,好比班上的三好生,虽然在某个科目上无法做到最优秀,但是每一门功课几乎都没有短板。也就是说学好了.NET一种技术平台就可以应对各种商业场景的开发,这对中小团队是非常友好的。”

小飞不解的问:“为什么说对小团队非常友好?”

小黑:“你想,如果你用Java做Web开发,后续做桌面开发怎么办?Java在桌面端开发是没有优势的,如果你用Dart开发移动端,后续想做物联网开发怎么办?这对中小企业是很不友好的,因为他们不可能像大企业那样,为了极致的选型,可以养一批不同技术栈的人员。”

小飞琢磨了一下,好像是这么回事。

.NET发展和规划

小飞对.NET的发展不是很感兴趣,但是从事.NET技术开发又撇不开它,所以索性就去请教了前辈小黑。

小黑给了他一张版本演化图:

“你看到什么规律了没?”

小黑认真的回复到:“从以下.NET Core发展历史,我们可以看到它的发展的进度非常快,微软会每隔一年发布一个版本,有时候还不止一个,注意看,版本号为奇数的是普通版本,版本号为偶数的为长期支持版本(LTS),我们要关注LTS版本,一般长期支持时间为三年,所以我们选型版本的时候尽量以LTS版本为准”。

“原来如此,还是有一点讲究在里面啊。”

在小飞感叹的时候,小黑继续叨叨:“在未来.NET只有一个平台,就是现在.NET Core演化过去的.NET,而不会有.NET Framework的版本,.NET Core会在.NET 5.0这个版本上对新旧版本进行统一,所以未来从.NET 5.0到7.0都会叫.NET而不是叫.NET Core,而且统一名称后,微软会定义在每年的11月份进行新版本发布。”

“不知道你留意没有,这里为什么没有4.0的版本?”小黑故意停顿了一下。

“是啊,我刚才没有注意看,确实版本号有断档。”小飞挠了挠头。

“原因是当前.NET Framework为4.8版本,所以二者如果要融合的话,就不能起一个版本冲突的4.X的名字。”

“明白,非常感谢!”,小飞对.NET的历史和未来有了更加深刻的理解。

ASP.NET Core的特点

聊了.NET的前世今生,小飞若有所获,但是对ASP.NET这个家伙,有点迷惑,到底什么是ASP.NET呢?

小飞故意查了一下ASP的全称,ASP(Activity Server Page活动服务器网页),回想之前看到的ML.NET和Azure.NET,小飞若有所思:ASP.NET应该就是用来开发Web应用的子框架了。

就在小飞得意之时,小黑突然微弱地问了一句:“你知道ASP.NET和ASP.NET Core有什么区别吗?”

“卡壳中……”

小黑像个布道师一样继续说道:“别看他们二者很像,其实骨子里是两套完全不同的设计框架。除了性能提高之外,关键是新架构采用了组件化的设计理念。”

“组件化是个好东西,而且也听得多了,但是这里的组件化具体是什么意思,为什么要组件化呢?”小飞发现自己对ASP.NET Core的认知还很肤浅,小黑的话给了他很多触发,也产生了更多的疑问。

小黑解释道:“组件化借鉴的是乐高思想,它的核心是复用。比如,我们可以用有限的乐高组件拼装出各种栩栩如生的玩具。同样,我们可以复用ASP.NET的组件,比如依赖注入、配置框架、选项框架、日志框架、HTTP中间件等,像流水线一样拼装出各种我们想要的Web应用,这里有个高大上的名称叫控制反转,扯得有点远,我们后面再聊。”

“嗯,你的比喻非常形象,乐高确实有很强的复用性。而且,我看每个小孩几乎都会玩,而且可以无限扩展。”

“是的,组件化还有易扩展的特点,不知道你发现了没有,小孩玩乐高是越玩越得心应手,一旦你对ASP.NET的各个组件熟悉之后,我相信你也可以快速生产各种应用了。”

小飞在心中默默的念叨:ASP.NET Core、乐高、易复用、易扩展。

小黑又进一步问道:“好的框架,除了以上,还应该具备哪些特点吗?”

小飞脑子又嗡嗡起来:“这可是架构师要考虑的,我无论如何也想不出来啊。我只知道以前很多人选择Java都说因为Java跨平台。现在很多钟情Go,因为容器化、易部署。”

“对了,你说出了两个很重要的关键词,跨平台、易部署,这个.NET也考虑到了。”

小黑很兴奋,声音有点大。

“虽然微软的开源来得有点晚,很多人对他的过往独裁有成见,但这次开源确实也是很给力,C#也已经摆脱Windows系统的限制,不但支持Mac OS和Linux,而且对容器化(Docker),微服务、容器编排(Kubernetes)等技术的支持非常友好,这很好地顺应了云原生的未来趋势。”

很多新概念在小飞的脑袋开始延伸开来……

“为什么微服务和容器化关系这么密切,我经常听别人把这两者放在一起?”

小黑:“你可以这么思考,一旦服务的数量扩大为成百上千后会怎么样?”

小飞:“这么多的服务,部署和运维会让人抓狂吧?”

小黑:“对的,易部署和易运维也是ASP.NET Core的重要特点。”

一个新框架的诞生想不到背后有这么多的设计理念,小飞继续在心中念叨一遍:ASP.NET Core、乐高、易复用、易扩展、跨平台、易部署、易运维。

“小飞,别忘了,新架构如果性能不够优异,其他的指标再好也没人用的。”

“是哦,我经常听老的.NET程序员聊过旧版ASP.NET首次加载很慢,不知道这次全新改版性能怎样?”

“微软在设计早期就将性能列为其重要的目标之一,根据性能测试网站Tech Empower的最新数据(Round18 2019-07-09),ASP.NET Core在云服务器规格下(Azure D3v2 instances)的Plaintext响应测试可达215 941次/秒,JSON序列化响应测试可达52 623次/秒,表现非常亮眼。”

小飞对测试数据没有什么感觉,但是感觉好像很快的样子,小飞在脑子里对这些特点画了一幅脑图:

“小飞,你这幅脑图应该再加一个圈,里面填上…的省略号,他可不仅仅只有这些能力,很多内容我也没用过呢。”

“还能有什么能力,我感觉上面这些已经很高大上了啊?”

“我把其他的能力也列在下面,你可以看看。”

编后语:

作者的腾讯课堂《.NET Core入门和实战》系列课程持续更新中,感谢您的捧场。

为什么选择ASP.NET Core相关推荐

  1. ASP.NET Core介绍

    认识ASP.NET Core ASP.NET Core是一个跨平台,高性能,开源的框架,用于构建现代,基于云的网络应用程序,使用ASP.NET Core可以实现: 开发web应用,服务,IoT应用和移 ...

  2. ASP.NET Core 实战:使用 NLog 将日志信息记录到 MongoDB

    在项目开发中,日志系统是系统的一个重要组成模块,通过在程序中记录运行日志.错误日志,可以让我们对于系统的运行情况做到很好的掌控.同时,收集日志不仅仅可以用于诊断排查错误,由于日志同样也是大量的数据,通 ...

  3. ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)...

    在正式进入主题之前我们来看下几个概念: 一.依赖倒置 依赖倒置是编程五大原则之一,即: 1.上层模块不应该依赖于下层模块,它们共同依赖于一个抽象. 2.抽象不能依赖于具体,具体依赖于抽象. 其中上层就 ...

  4. ASP.NET Core使用Jaeger实现分布式追踪

    前言 最近我们公司的部分.NET Core的项目接入了Jaeger,也算是稍微完善了一下.NET团队的技术栈. 至于为什么选择Jaeger而不是Skywalking,这个问题我只能回答,大佬们说了算. ...

  5. Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一)

    图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core Web Api实现图片上传存储以及生成缩略图呢?今天我就使用MongoDB作为图片存储 ...

  6. 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为"希赛网" ...

  7. 在ASP.NET Core中使用Angular2,以及与Angular2的Token base身份认证

    Angular2是对Angular1的一次彻底的,破坏性的更新. 相对于Angular1.x,借用某果的广告语,唯一的不同,就是处处都不同. 首先,推荐的语言已经不再是Javascript,取而代之的 ...

  8. Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程

    Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程 原文:Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程 Asp.Net Cor ...

  9. ASP.NET Core Web API/MVC应用中间件中的Cookie记录

    目录 介绍 背景 Cookie身份验证事件 Cookie记录中间件 预防措施 结论 介绍 有时,我们必须在开发站点或生产站点中登录Cookie以进行调试.我们有过这样的情况. 背景 在我们为Andro ...

最新文章

  1. hibernate保存会先insert再update_Hibernate的批处理
  2. es java_java整合ElasticSearch导入数据到es中
  3. 十一、explain属性介绍
  4. SQL Server 分区表 处理海量数据
  5. python生成pdf文档_使用Python生成pdf文件
  6. 推荐一个比FiddlerCore好用的HTTP(S)代理服务器
  7. Servlet总结1---基础东西的介绍
  8. 漫射光层析成像的正问题理论模型(一)——蒙特卡洛模型概述
  9. Python自动发送微信消息
  10. python计算机视觉 相机标定--张正友棋盘格标定法
  11. 【SpringMVC】——图解执行流程
  12. 如何让vnc控制由默认的twm界面改为gnome?(转)
  13. 递归回溯生成和解决数独问题c/c++
  14. java多线程世界时钟_Java实现的动态数字时钟功能示例【显示世界时间】
  15. Unity异常退出日志存储位置
  16. 【Linux后端开发必问】操作系统系列(Linux常用命令、文件权限修改、静态与动态库的制作)
  17. 用不了chatgpt,试试Claude-Claude注册教程
  18. Caffeine Eviction策略
  19. 【STM32】LCD液晶显示
  20. JPA和Spring-Data-JPA简介

热门文章

  1. WriteComponent,ReadComponent
  2. JailbreakMe.com-最新浏览器模式破解iPhones,iPads和iPod Touches方法
  3. 二叉树的建立与遍历_51、二叉树遍历-重建二叉树JZ4
  4. 洛谷 P1736 创意吃鱼法(多维DP)
  5. *[hackerrank]Girlfriend Necklace
  6. Cypher查询语言--Neo4j-WHERE(三)
  7. sqlserver2008 创建支持文件流的数据库
  8. dvd vlc 复制_如何使用VLC翻录DVD
  9. 中输入learn_Scikit-learn新版本发布,一行代码秒升级
  10. 深度挖掘 Laravel 生命周期