大家好,今天按照昨天的预告,整理一下我看到的.Net Core相关消息及博客内容,再结合我自己的理解,来一起聊聊.Net Core。我们进入今天的正题。 首先得知道一个消息,.Net Core在2020年9月后就要被.Net 5所替代了,届时正式的.Net 5又具有哪些不同于.Net Framework和.Net Core的部分让我们拭目以待。 先一起来看看源于微软官方的.NET简易框架解析图
.NET Ecosystem (.NET 生态)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
可以看到,.NET生态系统有三个主要的高级组件,.NET Framework, .NET Core, 和 Xamarin. 接下来,我们一起来读一篇《What is the future of .NET》,作者是mahesh chand,文章发表于2019年10月4号,窥测一下以后.NET 会是什么样子(以下文章夹杂着我自己的理解,愿意看英文原文的请走这边 https://www.c-sharpcorner.com/article/future-of-dot-net/ )
2019年9月,微软正式发布了.NET Core 3.0,并且着重强调了三个特点: a .NET Core 中继承了.NET Framework许多重要的组成部分 b .NET Core 支持WinForms和WPF c 植入了Windows兼容包 我们从实际上发生的一些变化去理解这三个特点。 a* -.NET Core 选择放弃支持.NET Framework的部分有以下内容 -ASP.NET Web Forms -ASP.NET MVC -WCF Server -Windows Workflow -AppDomains -Code Access Security 换句话说,除了这些内容,.NET Framework 4.8 中的其他部分绝大多数是可以在.NET Core中正常使用,不受影响。 由于这几十年来用开放平台的方式打造生态的商业模式使得只有商家造玩具玩家才能使用的时代正在慢慢过去,眼睁睁的看着JAVA等后起之秀渐渐因为丰富的Library抢占市场份额,2014年微软正式宣布加入开源队伍,这是诞生.NET Core的众多原因之一,现在微软已经组建了成熟的.NET Core研发团队,并且在Github等主流的开源平台上与大众开发者保持着沟通。 b* -WinForms 和 WPF 的区别(以下内容出自于《深入浅出 WPF》,作者刘铁猛,初次刊印时间是2010年7月1日 对于2020年才开始了解WPF的我而言实在自惭形秽,由于WCF和WF被舍弃了,就不赘述,而在众多用于编写表述层的技术中WinForms和WPF是GUI开发变革的分水岭)
-在WPF出现之前,Windows Forms、ASP.NET(Web Forms)等技术均使用“事件驱动”理念,这种由“事件➡订阅➡事件处理器”关系交织在一起构成的程序,尽管可以使用MVC,MVP等设计模式,但一不小心就会使界面逻辑和业务逻辑纠缠在一起,造成代码变得复杂难懂、bug难以排除。而WPF技术则是微软在开发理念上的一次升级——由“事件驱动”变为”数据驱动“。事件驱动时代,用户每进行一个操作会激发程序发生一个事件,事件发生后,用于响应事件的事件处理器就会执行。事件处理器是一个方法(函数),在这个方法中,程序员可以处理数据或调用别的方法,这样,程序就会在事件的驱动下向前执行了。可见,事件驱动时代的数据是静态的,被动的;界面控件是主动的,界面逻辑与业务逻辑之间的桥梁是事件,而数据驱动正好相反,当数据发生变化时,会主动通知界面控件,推动控件展示最新的数据;同时,用户对控件的操作会直接送达数据,就好像控件是“透明”的。可见,在数据驱动的理念中,数据占据主动地位、控件和控件事件被弱化(控件事件一般只参与界面逻辑,不再染指业务逻辑,使程序复杂度得到有效控制)。WPF 中,数据与控件的关系就是哲学中的内容与形式的关系——内容决定形式所以数据驱动界面,这非常符合哲学原理,数据与界面之间的桥梁是数据关联(Data Binding),通过这个桥梁,数据可以流向界面,再从界面流回数据源。 -微软已经把 WPF 的理念扩展到了几乎全部开发平台,包括桌面平台、浏览器平台和手机平台。 -在 WPF 出现之前,协作一般是这样展开的: -需求分析结束后,程序员对照需求设计一个用户界面(User Interface,UI)的草图,然后把精力主要放在实现软件的功能上。 -于此同时,设计师们对照需求,考虑用户的使用体验(User Experience,UX),使用专门的设计工具(比如 Photoshop)设计出优美而实用的UI。 -最后,程序员按照设计师绘制的效果图,使用编程语言实现软件的UI。 网络程序开发团队的经验倒是很值得借鉴,草图产生后,设计师们可以使用 HTML、CSS、Javascript 直接生成UI,程序员则是在这个UI产生的同时实现它背后的功能逻辑。在这个并行的合作中,设计师们可以使用Dreamweaver等设计工具,程序员使用Visual Studio来进行后台编程。有经验的设计师和程序员往往还具备互换工具的能力,使得他们能基于 HTML+CSS+Javascript 这个平台进行有效的沟通。为了把这种开发模式从网络开发移植到桌面开发和富媒体网络程序的开发上,微软创造了一种新的开发语言——XAML(读作zaml)。XAML的全称是 Extensible Application Markup Language,即可扩展应用程序标记语言。它在桌面开发及富媒体网络程序的开发中扮演了 HTML+CSS+Javascript 的角色,成为设计师与程序员之间沟通的枢纽。 c* -多平台兼容运行。(这个部分会讲的详细一点,看这个部分要保持头脑的清醒,因为被狂热吹捧,说实在的既要看到跨平台的好处,我们更应该关注新的特性给业务带来的益处,否则,坦白讲,没有客户愿意付费把一个能用的应用程序换成另外一个也只是能用的应用程序。接下来,我会引用《Programming ASP.NET Core》中第16章-迁移和采用策略的一部分论述,作者 Dino Esposito)
.NET – A Unified(统一) Platform
上面这张图向我们传达了两个关于.NET Core 的下次进化,也就是.NET 5的重要信息:
1,在兼容平台方面,.NET 5提供的库,框架,工具和API,可以构建,测试,运行和部署针对所有平台(包括Windows,Linux,IoT,macOS,iOS,Android,tvOS,watchOS和WebAssembly)以及包括台式机, Web浏览器,IoT设备,平板电脑,移动电话等。
2,在工具版本多样性方面,.NET 5将.NET的所有内容都放在一个统一的平台下,包括主要的高级库和API,低级库,类型系统,运行时组件,编译器,语言和工具。
在简单了解了.NET 5会由哪些特征之前,我们先一起看一下 Dino Esposito 在他 《Programming ASP.NET Core》的第16章中对于ASP.NET Core非常中肯的见解:
-多平台支持
.NET Core 框架是对 .NET Framework 的彻底重写,专门针对在包括 Windows 在内的多个不同平台上编译而创建。因此,针对 .NET Core 框架的 ASP.NET Core 应用程序也可以在多种 Linux 服务器平台上托管。
ASP.NET Core 应用程序的跨平台本质是其最重要的业务价值。有些人可能认为,这种应用程序仍然是 Web 应用程序,所以已经可以从任何平台和操作系统上访问。但是,ASP.NET Core应用程序的跨平台本质的真正意义在于托管,而不是访问。很多公司之所以没有考虑 ASP.NET,就是因为运行 Windows Server 所必须的许可,或者他们只能使用 Linux这样的开放平台。而且,Windows 托管仍然比 Linux 托管的费用高,但费用差别不大,而且很可能会继续缩小,这就使得 ASP.NET Core 成了可以考虑的选项。最后,公司能够从跨平台的ASP.NET 受益,因为(集成)测试能够在更便宜的 Linux 计算机上运行程序,从而进一步节省成本,另外,Linux 的托管生态系统比 Windows 更大并且不限制只使用一个供应商。
-提高性能 1,ASP.NET Core 的管道是异步的,保证了在任何时候只有最少量的进程池中线程是繁忙的。
针对传统的 Web 表单(system.web)+ MVC(MVC模型)+ Web API (OWIN)纠缠在一起的ASP.NET 框架组合,ASP.NET Core应用程序重新设计了 Runtime components 运行结构,使得HTTP在运行时应用程序占用内存量相对于传统ASP.NET 运行时占用内存是其实际需要3倍以上要好得多。
2,管道经过重新设计,HTTP功能模块化程度极大提升。
整个 ASP.NET Core 框架以 NuGet 包形式提供,允许只选择自己真正需要的功能。传统的 ASP.NET 应用程序整个请求处理管道基本上都是硬编码,只有部分可禁用可定制。
3,程序运行速度更快。 在相同基准的情况下单位时间内处理请求数,比传统ASP.NET高出5倍以上。
-改善的部署体验
ASP.NET Core的部署方式属于自包含部署。在自包含部署中,应用程序在交付时,不止包含自己的二进制文件,还包含整个框架,应用程序占据自己的内存空间,并且能够完全独立运行。代价是磁盘空间占用量增加了一个级别,通常是从几MB增加到几十MB。传统的ASP.NET的部署依赖于框架,在交付程序时只带有自己的二进制文件,这意味着服务器上应该已经安装了必要的框架,多个应用程序可以享用统一框架,不过一些应用程序可能需要同意框架的不同版本。对于这种情况,必须安装框架的两个版本,可能导致一些小问题,最常见的问题比如你得重新准备另一个版本的DLL而你却不小心弄混了。
-改善的编程体验 Microsoft 将 MVC与Web API控制器模型统一到一起,并且添加了原生的注入依赖。另外,中间件的模块化程度更高,能省去不少编码量。
-开源 在Github上可以找到 .NET Core 全部源码。
-偏向微服务 微服务(概念不做赘述).NET Core 对于 Docker的支持使得ASP.NET Core也可以真正作为复杂系统架构组合体系的一部分。
以上内容基本上囊括了.NET Core中客户端方面和浏览器方面的近期发展状况。 简单总结一下: .NET 5五个关键的特征 -一个适用于所有内容的统一平台,包括Windows,Mac,Web,移动,云,物联网,游戏,机器学习和数据科学。 -由开源社区管理,并由Microsoft支持。 -跨平台,支持任针对任何设备的开发。 -支持.NET Framework,.NET Core和Xamarin。 -支持最高效的IDE和工具,包括Visual Studio,VS Code,Mac的VS和命令行界面(CLI)。 关于上面五个关键特征还需要单独展开,届时会根据业务场景,语言特征简单描述。
闲话:
就先到这里,这里简单提及一下UWP,由于XAML能直接应用在有关于使用Xamarin的开发场景中,这样就使得一张UI可以依据需求转换成应用到不同设备相应的内容。具体可以详细翻看微软关于用UWP建立Project的视频讲解,当然是英文,这对英文不好的同学很不友好呀,我后面会抽空整理这部分内容。
我是moore,大家一起加油!