2

为什么选择ASP.NET Core

 2 years ago
source link: https://www.cnblogs.com/jackyfei/p/14899432.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

什么是.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应用,这里有个高大上的名称叫控制反转,扯得有点远,我们后面再聊。”

127185-20210618143552652-1013784403.png

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

“是的,组件化还有易扩展的特点,不知道你发现了没有,小孩玩乐高是越玩越得心应手,一旦你对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次/秒,表现非常亮眼。”

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

127185-20210618143619167-238883095.png

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

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

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

127185-20210618143641517-284892034.png

本人的.NET Core入门和实战系列课程持续更新中,感谢您的捧场。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK