一张图来看看.NETCore和前后端技术的演进之路

一张图


2019年3月10日,在长沙.NET 技术社区组织的技术沙龙《.NET Core和前后端分离那些事儿》上,我们曾经试图通过一系列抽丝剥茧的过程来引导大家在这条基于.NET Core的前后端分离有关的技术路线上持续发散,由于各种原因未能成功,因此,技术社区执行主席,李文强同学整理了一张图,并由溪源以专刊的形式来描述他所认为的技术演进之路。 

640?wx_fmt=png

 这张图涉及到的知识点,涵盖了目前前后端技术近五年来发展的方方面面,作者期望通过这一张图,对当前技术发展方向进行一些简单的分析,并希望能通过与读者们进一步交流,梳理出一些能够让更多人快速参与到.NET Core的学习过程来的技术资料,期待通过大家的共同努力,能够为促进.NET 社区的发展做成一些贡献。 

本文的吐槽专用地址为,溪源的博客园https://www.cnblogs.com/xiyuanMore/,欢迎大家来拍砖。

一,前后端分离,好聚好散,你好我也好

HTTP协议是互联网技术得以飞速发展的基础,在这个起源于上世纪六十年代的古老传输协议,到今天已经走过了六十个年头,并深深的影响了时代。 

到目前为止的新时代,对HTTP协议的应用可以说无处不在了,而面向bs的应用作为后起之秀,经历了30年的发展,终于主宰了世界。 

在过去的若干年间类似于php,ASP.NET ,这种技术一度成为时代的主旋律。这些脚本化的技术,希望通过降低开发者的学习成本,实现开发效率的提高,实际上它看上去也做到了。 

但是由于这种技术存在许多问题,例如,在 ASP.NET Web 窗体页面上 C# 代码和 HTML 的混合方式使其难以构建单元测试。如果无法测试,久而久之,大型网站的维护和修改工作会变得更加困难。如果您确实创建了测试,这些测试大部分是运行 UI 的功能测试 — 即使是在今天,这也是一种脆弱的测试构建法。对网页的任何更改都很可能会中断该页面的所有测试。 (参考资料3)

随着技术的演进,发展出了服务端渲染的方式,例如ASP.NET MVC。用户请求网页后,后端先调用数据库,获得数据之后,将数据和页面元素进行拼装,组合成完整的 html 页面,再直接返回给浏览器,以便用户浏览。 

然而,由于随着开发者职责分工的进一步细化,最终于是,开发者们将资源的粒度进一步拆分,后端的归后端,前端的归前端,你走阳光道,我走独木桥,前端通过ajax调用,后端则通过restful api来提供数据。优秀的开发者们互相配合,终于打造了互联网时代的高效的开发效率。 

 

640?wx_fmt=jpeg
从选择前后端分离技术开始,前端与后端看似走上了不同的发展道路,但优秀的开发者从来都不甘寂寞,他们能服从这种古老的秩序么?

 

二,大前端的前身今世

前几天看到的消息(参考资料1),著名的开源组织Node.js基金会和JS基金会宣布合并,成立OpenJS基金会,通过提供一个中立的组织来托管项目并协作资助有益于整个生态系统的活动,从而促进 JavaScript 和 Web 生态系统的健康发展,为推广技术而努力。目标是让项目轻松、直接地加入 OpenJS 基金会并利用其技术和社区治理经验。托管项目将是基金会的主要关注点,但 OpenJS 基金会也会将其能力扩展到非托管项目。  
JavaScript、Node.js和前端技术,成为移动互联网时代的最闪亮的一颗星,是偶然或是必然?

640?wx_fmt=png
曾几何时,随着前后端技术的逐渐分野,Javascript作为网页开发过程中的重要补充,为数据数据交互过程提供支持,似乎形成了一种定则或者说是一种秩序。 

然而,极客们不是这样想的。Ryan Dahl是Node.js的创始人,他认为Javascript是一种优秀语言,设计优雅,功能强大,但是却只能用于前后端数据交互过程中的中间媒介,运行在网页前端,这显然是大材小用。 

大家都是语言,凭什么还要分高低贵贱之分? 

他一直想寻找一种打破旧秩序的机会,而谷歌开源组件v8引擎给了他机会。利用v8引擎,他开发了Node.js,并很快被一大批优秀企业奉为圭臬,众人拾柴火焰高,有了大企业的参与,搞起事情来果然与众不同,一时间成为了炙手可热的新兴技术。 

与此同时,伴随着前后端分离而来的,还有一大波各种风格的前端UI架构,那些内心对美充满了渴望的优秀的前端工程师们利用有限的资源,开发出类似于bootstrap,layui等在内的各种前端框架,让前端成为了美的代名词。 

Node.js与那么多前端的UI框架们碰到一起,就是肉体和灵魂的完美融合,打造出来的,已经不在是昔年那个空有外表、必须依赖别人提供力量的体弱多病的林妹妹,而是一个骨骼健硕,充满战力的女汉子。 

而昔日仅仅只能开发界面,对于数据的话语权,可以说完全没有,只能听从后端工程师的调排的前端工程师们终于可以获得一次翻身的机会,谁愿意让机会从指尖滑过,他们用自己的双手,硬生生的拉开了这场大前端时代的帷幕。 

一时间,正可谓百花齐放,百家争鸣,前端能够干的事情也越来越多,甚至于多少年以来前端工程师鲜有涉及的领域,也可以成为前端工程师们挥毫泼墨的精彩画卷。 

无论是后端的专属领域,数据和数据库,大前端开发者都可以独立完成,而是还不仅仅局限于关系型数据库,或者非关系型数据库,限制前端工程师们操作数据的一个个壁垒,早就成为纸糊的墙纸。 

还是持续集成技术的实践。前端工程化,让前端从单个网站中分离出来,成为一个更加灵活和安全性更高的应用体系,高性能,稳定性,高可用性,高可维护性,这些以往用来形容后端技术的词语,也可以应用在大前端工程师开发的杰作之中。 

或者是设计模式和架构思想,我还记得两年前有人评论说,前后端工程师,以后最大的区别,大概是架构思想吧。然而,到了今天,设计模式和架构思想,也成为了前端工程师们政治正确的一个标杆,例如MVVM和AOP等,都被前端开发者们玩得滚瓜烂熟。前端三大框架,angularjs,react,vue.js格外引人注目,靠着独特的设计,一时间成功的占领了与一切前端有关的技术领域,不管是网页、跨平台的app、甚至桌面程序,这些对大前端开发者来说都不是难事。 

为什么前端会迎来如此绚烂的新时代呢?因为没有爹,没有爹就意味着没有历史的包袱,如同一个黑洞一般,包容和吸取一切可以吸收的精华。

 

三,大后端的是是非非

相对于前端而言,曾经一度,后端语言的发展可谓是波澜不惊,不悲不喜来形容。 

这边的Java,自从被甲骨文收入囊中之后,开始了漫长的挤牙膏的过程,虽然保持着一年最少一更最多两更的节奏,但是却后期的版本似乎并没有太多值得称赞的新特性。然而,由于其精良的设计理念和开源的优越性,却意外的赶上了互联网时代和移动互联网时代两波大风口,造就了前所未有的辉煌。 

而墙内的巨头微软,沉迷于软件公司不可自拔,刚收了诺基亚才没多久就创下大几十亿美元的资产减记。唯一值得称赞的或许是游戏市场,大概一度,微软或许想甚至把游戏当做了翻身的唯一机会,然而,颓势一旦开始就难以逆转,在战线拉得太开,让微软腹背受敌,这也直接影响了.NET 技术的发展。.NET 是微软于2000年推出来的技术,曾经试图通过.NET 称霸互联网市场,曾经一度大杀四方,让对手毫无招架之力。但是封闭和对于操作系统的过于依赖,最终成为一个美丽的遗憾。这么优秀的技术框架,逐渐衰弱,成为了强者们的垫脚石。  

640?wx_fmt=jpeg

在后端语言市场,GO语言的兴起是一个变数。他来自于谷歌,当时2009年Sun经营不善,选择打包出售时谷歌错过了下手的时机,让Sun落入甲骨文之手。而错失Sun的代价对谷歌来说很惨烈,一连串的知识产权官司让谷歌深受打击,于是谷歌痛定思痛,开发出服务端新兴语言体系GO语言。谷歌不愧为软件巨头,GO语言这个专门为互联网而设计的优越语言,性能优越,功能强大,成为了后端市场的搅局者。 

前有Java拦路虎,后有谷歌大灰狼,微软以前足以跟Java分庭抗礼的半壁江山,眼看即将十不足一,微软就这么甘心把自己的奶酪献给别人么? 

微软需要一场秩序的变革,究竟谁能来拯救他?谁来当这个白衣骑士? 

一位根正苗红的微软人,善于Hit Refresh的印度裔移民萨提亚·纳德拉被推举了出来。过去若干年,他一直在微软核心部门,负责了许多拳头产品的研发,这一次,他要负责的项目,既不toC,也不toB,而是负责将微软从泥坑中拉出来。他没有让投资者和微软、用户失望,他做到了。从战略的宏观层面,提出了云为先的战略,获得了投资者的支持,又从战术层面,推出了全新的.NET Core,成为了后端开发市场的巨大变数。  

640?wx_fmt=png
.NET Core这种优秀的技术,首先继承了来自他的父辈.NET Framework一般优秀的设计理念,又兼具他的对手们那些开源,开放灵活的个性,同时又天生具备高性能和跨平台的技能,成为后端市场一种新的选择。 

时至今日,.NET Core的应用前景已经十分可观,无论是微服务,还是容器化,弹性架构等新兴的分布式场景,还是大数据,人工智能,自然语言等时髦领域,它同样可以驾驭。而对于企业而言,同样可以使用.NET Core来开展DevOPS实践,为企业的进一步腾飞插上无穷的想象力。 

到目前为止,.NET Core即将发布3.0版,有哪些新特性值得期待?我们来看一下吧。 

0,NET Core 3实现了.NET 标准2.1。 
1、生成可执行文件。 
2、生成依赖项的副本 
3、本地工具 
4、支持WPF与Windows Froms 
5、内建快速的JSON解析器 
6、索引和范围 
7、异步流 
8、类型:SequenceReader 序列读取

9、类型:MetadataLoadContext 元素据负载描述表 

10、支持Linux 上的 TLS 1.3 和 OpenSSL 1.1.1 

11、AES-GCM 和 AES-CCM加密算法支持 
12、加密密钥的导入导出 
13、Linux上支持串口 
14、优化了很多现有功能 
15、分层编译 
16、Linux的ARM64 
限于篇幅,不便全文转载,具体请查看参考资料2。 
 

四,结语,谁能独步武林? 

随着互联网时代冬天的到来,未来或许将迎来几年平静的沉淀期,然而哪怕就算是看似平静的格局,同样也会出现革命者。尤其是开发语言,从来就没有什么稳定不变的江湖地位可言。在今天看来,似乎Java一家独大的局面已经成为定势,难道这种局面就这样了吗? 
从前后端一体化,到前后端分离,从Node.js的崛起于极客圈,到GO,NET Core孕育于巨头之中,新时代,从来没有谁能独步武林。 
未来,谁都有机会~

是时候刷新自己,与新技术共同进步了!! 

五,附件,一些可用的学习路线图或资料

 

1,ASP.NET Core学习路线图。HTTPs://github.com/MoienTajik/AspNetCore-Developer-Roadmap 
2,来自广西的.NET Core爱好者陈蛇和他的小伙伴们参与收集和翻译的资料HTTP://www.iotxfd.cn/

3,张善友老师整理的Ocelot学习资料https://www.cnblogs.com/shanyou/p/10363360.html 

六,参考资料

1、https://www.cnbeta.com/articles/tech/826737.htm 开源中国新闻《Node.js 基金会与 JS 基金会合并为 OpenJS 基金会》 
2、https://www.ithome.com/0/398/577.htm  
IT之家新闻《微软发布.NET Core 3.0预览版:支持Win32应用添加流畅设计》 

3、https://mp.weixin.qq.com/s/rHiMpNregBNCbpCqm3ykdA DotNET跨平台公众号,《微软开源故事 | 开启 .NET 开源革命》

 

【版权声明】 

作品来自于长沙.NET技术社区成员【邹溪源】,有兴趣了解长沙.NET技术社区详情,请关注公众号【DotNET技术圈】,作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

码字不易,求赞赏或拍砖

(您赞赏的所有费用都将作为长沙.NET技术社区运营费用维持社区运营)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记】我命由天不由我之随机化庇佑 —— 爬山法 和 模拟退火法

以下均假设最优解是在最低点。 爬山法 爬山算法是一种局部择优的方法,采用启发式方法,是对深度优先搜索的一种改进,它利用反馈信息帮助生成解的决策。 直白地讲,就是当目前无法直接到达最优解,但是可以判断两个解哪…

Strange Memory Gym - 102832F

Strange Memory Gym - 102832F 题意: 有一颗n个节点的树,求下面公式的值: 题解: a ⊕ b c 可以推出a ⊕ c b 那么ai⊕ajalca(i,j)a_{lca(i,j)}alca(i,j)​,可以得到:ai⊕alca(i,j)a_{lca(i,j)}alca(i,j)​aj,ai就…

.net core 使用RSA获取私钥证书并签名

以前我们使用RSA加密主要是使用RSACryptoServiceProvider这个类,在.NET Core中也有这个类,但是这个类并不支持跨平台,所以如果你是用这个类来进行加/解密在windows上运行是完全没有错误的,但是只要你一放到Linux下就会出现异常。查…

CDN流量调度问题(2021CCPC华为云挑战赛)

CDN流量调度问题 题意: 有n个线路,每个线路的任务量为a[i],初始状态下,每个线路起初只有一个节点,每个线路完成任务所需时间为 现在你要给每个线路增加节点,所有增加的节点总数不超过m,第i个线路增加节点…

.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

.NET Core 3.0 Preview 3已经推出,它包含了一系列关于ASP.NET Core的新的更新。下面是该预览版的更新列表:Razor组件改进:单项目模板 新的Razer扩展Endpoint路由集成预呈现Razor类库中的Razor组件改进事件处理 Forms & validation运行时编译Worker服…

世界五星级大厨经典菜品集

本blog只是记录C学习以来掉过的一些坑,写下来防止自己下一次再犯,顺便分享 持续更新,到死为止菜品特套1:vector.size() ~ 的使用菜品特套2:if-else的缩进菜品特套3:int范围边界的1ll使用菜品特套4&#xff…

ASP.NET Core 使用 Google 验证码(Google reCAPTCHA)

关心最多的问题,不FQ能不能用,答案是能。Google官方提供额外的域名来提供服务,国内可以正常使用。一. 前言验证码在我们实际的生活场景中非常常见,可以防止恶意破解密码、刷票、论坛灌水、刷注册等等。现在的网站基本都有使用验证…

P4173 残缺的字符串

P4173 残缺的字符串 题意: 有A,B两个串,每个串都有通配符,问A为模板串,对于 B 的每一个位置 i,从这个位置开始连续 m 个字符形成的子串是否可能与 A 串完全匹配? 题解: 我们定义…

FFT/NTT卷积神级副本

干货满满的良心博客传送至只有小怪的村庄——请开始你的逆天之路A:P1919B:P4157刷怪升级——转战玄灵大陆C:P6300D:P3763E:P3321F:P5641G:P4986H:P4721——获得知识药剂一瓶——分治…

程会玩 | 在.NET Core里操作Git

点击上方蓝字关注“汪宇杰博客”Git是很多程序员的首选源代码版本控制工具,我最近也从TFVC切换到了Git,受益匪浅。今天我就来带大家看看如何在.NET Core里操作Git。为啥要这么做首先,这件事情的意义,并不是闲的蛋疼。我们确实有很…

一个实时收集MySql变更记录的组件CanalSharp.AspNetCore

一、关于CanalSharpCanalSharp 是阿里巴巴开源项目 Canal 的 .NET 客户端。为 .NET 开发者提供一个更友好的使用 Canal 的方式。Canal 是mysql数据库binlog的增量订阅&消费组件。CanalSharp 是 Canal 的 .NET 客户端,它与 Canal 是采用的Socket来进行通信的&…

[Abp vNext 源码分析] - 1. 框架启动流程分析

一、简要说明本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的。总的来说 ,Abp vNext 比起 ABP 框架更加精简。因为在 vNext 版本当中,原来归属于 Abp 库的许多内置的基本组件 (组织…

使用 MSIX 打包 DotNetCore 3.0 客户端程序

如何你希望你的 WPF 程序能够以 Windows 的保护机制保护起来,不被轻易反编译的话,那么这篇文章应该能帮到你。介绍MSIX 是微软于去年的 Windows 开发者日峰会 上推出的全新应用打包解决方案。其目的是取代旧式的软件打包方式,可用于 Win32、W…

使用 C# 和 Blazor 进行全栈开发

Blazor 是将 C# 引入浏览器的 Microsoft 试验框架,正好可以填补欠缺的 C# 一环。如今,C# 程序员可以编写桌面、服务器端 Web、云、电话、平板电脑、手表、电视和 IoT 应用程序。Blazor 填补了欠缺的一环,C# 开发人员现在可以直接在用户浏览器…

AWS vs K8s 是新的 Windows vs Linux

作者:Ian Miell是开源程序员、演讲师、作家和博客写手以前……如果你与我一样,年过四十,又在IT行业工作,恐怕还记得每个人使用Windows,一小群但越来越多的人在业余时间埋头编译Linux的年代。Windows用户见此情形会困惑…

Asp.Net Core中的静态文件-12

目录本文出自《从零开始学 ASP.NET CORE MVC》目录 推荐文章:配置 ASP.NET Core 请求(Request)处理管道Asp.Net Core 中的静态文件在这个视频中我们将讨论如何使 ASP.NET Core 应用程序,支持静态文件,如 HTML,图像,CSS…

在.net core 中PetaPoco结合EntityFrameworkCore使用codefirst方法进行开发

在.net core开发过程中,使用最多的就是注入方法。但是在.net core使用PetaPoco时,PetaPoco还不支持进行注入方式进行处理一些问题。今天对PetaPoco进行了一些扩展,可以很方便的将PetaPoco进行注入操作,使用和EF很相似,…

F-Pairwise Modulo

d数组是来算(x整除y)*y中y比x小的数 s数组是算(x整除y)*y中y比x大的数 (x整除y)*y 看x对于前面大于他的数是枚举,对于前面小于他的数是d树状数组储存。 d中 x整除y表示x中有多少个y 所以 …

【微服务学习】Polly:熔断降级组件

何为熔断降级“熔断器如同电力过载保护器。它可以实现快速失败,如果它在一段时间内侦测到许多类似的错误,会强迫其以后的多个调用快速失败,不再访问远程服务器,从而防止应用程序不断地尝试执行可能会失败的操作,使得应…

A - Junk-Mail Filter HDU - 2473

只是这样合并&#xff0c;分割点的时候就不能分了。 这样合并再加上虚拟节点&#xff0c;那么每个你要求的节点就的下面就不连其他节点了&#xff0c;这样就可以进行删除操作了 #include<iostream> #include<algorithm> #include<cstdio> #include<cstr…