从一张图开始,谈一谈.NET Core和前后端技术的演进之路
邹溪源,李文强,来自长沙.NET技术社区
一张图
2019年3月10日,在长沙.NET 技术社区组织的技术沙龙《.NET Core和前后端分离那些事儿》上,我们曾经试图通过一系列抽丝剥茧的过程来引导大家在这条基于.NET Core的前后端分离有关的技术路线上持续发散,由于各种原因未能成功,因此,技术社区执行主席,李文强同学整理了一张图,并由溪源以专刊的形式来描述他所认为的技术演进之路。
这张图涉及到的知识点,涵盖了目前前后端技术近五年来发展的方方面面,作者期望通过这一张图,对当前技术发展方向进行一些简单的分析,并希望能通过与读者们进一步交流,梳理出一些能够让更多人快速参与到.NET Core的学习过程来的技术资料,期待通过大家的共同努力,能够为促进.NET 社区的发展做成一些贡献。
本文的吐槽专用地址为,溪源的博客园https://www.cnblogs.com/xiyuanMore/,欢迎大家来拍砖。
二,背景,前后端分离,好聚好散,你好我也好
HTTP协议是互联网技术得以飞速发展的基础,在这个起源于上世纪六十年代的古老传输协议,到今天已经走过了六十个年头,并深深的影响了时代。
到目前为止的新时代,对HTTP协议的应用可以说无处不在了,而面向bs的应用作为后起之秀,经历了30年的发展,终于主宰了世界。
在过去的若干年间类似于php,ASP.NET ,这种技术一度成为时代的主旋律。这些脚本化的技术,希望通过降低开发者的学习成本,实现开发效率的提高,实际上它看上去也做到了。
但是由于这种技术存在许多问题,例如,在 ASP.NET Web 窗体页面上 C# 代码和 HTML 的混合方式使其难以构建单元测试。如果无法测试,久而久之,大型网站的维护和修改工作会变得更加困难。如果您确实创建了测试,这些测试大部分是运行 UI 的功能测试 — 即使是在今天,这也是一种脆弱的测试构建法。对网页的任何更改都很可能会中断该页面的所有测试。
随着技术的演进,发展出了服务端渲染的方式,例如ASP.NET MVC。用户请求网页后,后端先调用数据库,获得数据之后,将数据和页面元素进行拼装,组合成完整的 html 页面,再直接返回给浏览器,以便用户浏览。
然而,由于随着开发者职责分工的进一步细化,最终于是,开发者们将资源的粒度进一步拆分,后端的归后端,前端的归前端,你走阳光道,我走独木桥,前端通过ajax调用,后端则通过restful api来提供数据。优秀的开发者们互相配合,终于打造了互联网时代的高效的开发效率。
从选择前后端分离技术开始,前端与后端看似走上了不同的发展道路,但优秀的开发者从来都不甘寂寞,他们能服从这种古老的秩序么?
三,大前端的前身今世
前几天看到的消息(参考资料1),著名的开源组织Node.js基金会和JS基金会宣布合并,成立OpenJS基金会,通过提供一个中立的组织来托管项目并协作资助有益于整个生态系统的活动,从而促进 JavaScript 和 Web 生态系统的健康发展,为推广技术而努力。目标是让项目轻松、直接地加入 OpenJS 基金会并利用其技术和社区治理经验。托管项目将是基金会的主要关注点,但 OpenJS 基金会也会将其能力扩展到非托管项目。
JavaScript、Node.js和前端技术,成为移动互联网时代的最闪亮的一颗星,是偶然或是必然?。
曾几何时,随着前后端技术的逐渐分野,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 称霸互联网市场,曾经一度大杀四方,让对手毫无招架之力。但是封闭和对于操作系统的过于依赖,最终成为一个美丽的遗憾。这么优秀的技术框架,逐渐衰弱,成为了强者们的垫脚石。
在后端语言市场,GO语言的兴起是一个变数。他来自于谷歌,当时2009年Sun经营不善,选择打包出售时谷歌错过了下手的时机,让Sun落入甲骨文之手。而错失Sun的代价对谷歌来说很惨烈,一连串的知识产权官司让谷歌深受打击,于是谷歌痛定思痛,开发出服务端新兴语言体系GO语言。谷歌不愧为软件巨头,GO语言这个专门为互联网而设计的优越语言,性能优越,功能强大,成为了后端市场的搅局者。
前有Java拦路虎,后有谷歌大灰狼,微软以前足以跟Java分庭抗礼的半壁江山,眼看即将十不足一,微软就这么甘心把自己的奶酪献给别人么?
微软需要一场秩序的变革,究竟谁能来拯救他?谁来当这个白衣骑士?
一位根正苗红的微软人,善于hit refresh的印度裔移民萨提亚·纳德拉被推举了出来。过去若干年,他一直在微软核心部门,负责了许多拳头产品的研发,这一次,他要负责的项目,既不toC,也不toB,而是负责将微软从泥坑中拉出来。他没有让投资者和微软、用户失望,他做到了。从战略的宏观层面,提出了云为先的战略,获得了投资者的支持,又从战术层面,推出了全新的.NET Core,成为了后端开发市场的巨大变数。
.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。
有史以来,微软迎来了最开放的时期。不仅仅造就了市值的历史最高,更是执着于技术的发展和投入,对于.NET 开发者而言,同样迎来了新的机会。
五,结语,谁能独步武林?
随着互联网时代冬天的到来,未来或许将迎来几年平静的沉淀期,然而哪怕就算是看似平静的格局,同样也会出现革命者。尤其是开发语言,从来就没有什么稳定不变的江湖地位可言。在今天看来,似乎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之家新闻
3、https://mp.weixin.qq.com/s/rHiMpNregBNCbpCqm3ykdA DotNET跨平台公众号,《微软开源故事 | 开启 .NET 开源革命》
【版权声明】
作品来自于长沙.NET技术社区成员【邹溪源】,有兴趣了解长沙.NET技术社区详情,请关注公众号【DotNET技术圈】,作品采用知识共享署名-非商业性使用-相同方式共享4.0 国际许可协议进行许可。