.Net框架理论

.NET框架

.NET Framework是该平台的第一个也是最早的实现。它包括三个主要的应用程序模型 - WPF,Windows窗体,ASP.NET窗体 - 和基类库。

Windows Presentation Foundation(WPF)是一个UI框架,用于主要为Windows操作系统上的桌面客户端应用程序创建图形界面。WPF使用可扩展应用程序标记语言(XAML)的功能。

Windows Forms是.NET Framework中的GUI类库。Windows窗体用于开发具有易于更新和部署的丰富图形的桌面应用程序。

ASP.NET。虽然前两个组件是为桌面工程设计的,但ASP.NET用于开发动态网站和Web应用程序。其核心中有公共语言运行时(CLR),使开发人员有机会使用不同的.NET语言编写ASP.NET代码。公共语言运行时是一个应用程序虚拟机,它管理内存,实现代码访问安全性,验证代码安全性,并提供线程和代码的执行。

基类库(BCL)提供最常见的功能,如命名空间中的类 ,是框架类库(FCL)的核心,它是一组可重用的接口,类和值类型,与公共语言运行时(CLR)紧密集成)FCL和CLR的组合构成了.NET Framework。

由于.NET Framework仅支持基于Windows的设备,因此需要发生跨平台程序包。

.NET核心

.NET Core于2016年发布。它是.NET Framework的跨平台重构。与旧版本不同,工程师现在可以在Linux和OS X上使用该产品,并创建不一定与Windows系列相关的应用程序。新系统旨在征服云空间,因为像Digital Ocean这样的供应商是由Linux驱动的。不仅.NET Core是跨平台的,它的不同版本可以在同一设备上并排安装。.NET Core包括ASP.NET Core和通用Windows平台(UWP)。

通用Windows平台(UWP)是由Microsoft创建的API,用于开发在所有兼容的Microsoft Windows设备(即Windows,Windows Phone和HoloLens)上运行的通用应用程序。

ASP.NET Core是ASP.NET的重构,恰好是一个比其前身更模块化的框架。ASP.NET Core允许您构建移动后端,Web应用程序和服务。它也是跨平台的,可在OS X,Windows和Linux上运行。

Xamarin

第三种实现称为Xamarin,用于移动应用程序和Mac产品。最初,Xamarin是独立于Microsoft设计的,并且是微软在2016年收购它之前的专有产品,是.NET平台的完全开源分支。Xamarin使用Mono运行时和.NET Framework的一个版本进行调整,以便与iOS,Android和Xamarin.Mac的API一起使用。要详细了解该产品,请查看我们的Xamarin利弊文章。

所有运行时都使用通用基础架构,使整个生态系统工作。它提供运行时组件,语言和编译器。

.NET标准

2016年,Microsoft还推出了.NET Standard,这是一个结合了.NET Framework,.NET Core和Xamarin的API的库,允许工程师使用单个基类库,而不是掌握与每个.NET实现相关的三个不同的库。此步骤统一了生态系统,并为不同平台的组件重用提供了更高的一致性。

.NET开发平台最适合用于跨所有平台和设备构建,调试和发布应用程序的Visual Studio IDE。

目前,最流行的.NET实现是.NET Core和Xamarin。因此,让我们更深入地了解使用.NET开发平台的优缺点。大多数点可以应用于整个生态系统,而其中一些点仅与其特定组件相关,我们将在相应的部分中指定。

.NET开发的优点

面向对象的软件开发模型

.NET基于面向对象编程(OOP)。OOP是一种开发模型,其思想是将软件分解为更易于管理和组合的小块。OOP将数据划分为对象(即数据字段),并通过类的声明描述对象行为和内容。

模块化结构有助于定义对象及其交互的行为,而无需管理对象内部属性。OOP通过使代码易于管理,更易于测试以及响应重复出现的问题来简化编程。它还消除了不必要的编程,通常意味着开发人员编码更少。.NET使重用代码和组件成为可能,节省时间,并随后 - 开发成本。

可靠而简单的缓存系统

缓存意味着将数据保存在临时存储位置,以便在需要时更快地调用它。存储的数据是较早的信息请求或存储在其他地方的信息的副本的结果,这些信息需要更长的时间才能从中检索。

.NET中的缓存系统功能强大且易于使用。它也被设计为可扩展的。Object Cache类允许开发人员创建自定义缓存实现,以用于提高Windows客户端和服务器应用程序的性能和可伸缩性。

Visual Studio IDE

集成开发环境(IDE)是程序员的单一产品,它通过提供编写和测试软件的所有工具使应用程序开发更容易。

Visual Studio是一个Microsoft IDE,用于在所有平台(包括Android和iOS)上构建,调试和发布应用程序。Visual Studio与.NET集成,并提供特定于语言的环境的功能。

Visual Studio IDE的主要功能:

  • 它被用作所有.NET应用程序的单个IDE

  • IDE集成了编译和调试功能

  • 该解决方案可用于基于以不同语言编写的代码的应用程序

  • Visual Studio允许自定义环境以匹配用户首选项

最重要的是,Visual Studio Marketplace提供了来自Microsoft和其他提供商的各种编辑器扩展,以支持团队协作,持续集成,第三方连接,云开发管理等。

.NET Core的跨平台设计和语言独立性

.NET Core是一种跨平台的.NET实现,允许代码在OS X,Windows和Linux上运行。与原始.NET框架(仅部分开放)不同,.NET Core具有完全开放的源代码,可确保广泛的工程社区能够不断为其开发做出贡献。

如果您使用C#,F#或Visual Basic编写代码,则代码将在每个兼容的操作系统上运行。这使公司能够覆盖.NET生态系统中最广泛的平台。同时,跨平台设计和语言独立性确保了具有大量不同工程技能组的整个.NET社区分享经验。目前,.NET支持超过25种语言,包括C#,Visual Basic.NET,J#,托管C ++,IronPython和IronRuby。

灵活部署,易于维护

.NET Core的一项重要功能是灵活部署。它可以作为应用程序的一部分安装,也可以单独安装。模块化设计允许包含您需要的所有依赖项。部署本身就像复制文件夹一样简单。

另一个好处是,您可以在同一台计算机上并行运行多个.NET Core版本,以涵盖不同的项目并无缝执行部署任务。

通用.NET标准

自2016年以来,.NET生态系统通过名为.NET Standard的大型类库得到了增强。它基于.NET Framework,.NET Core和Xamarin的基类库的数量。这些用于处理常见功能,如图形渲染,数据库交互和XML文档操作。.NET标准库极大地简化了开发人员的工作。

在.NET Standard之前,程序员必须为新平台重新开发应用程序或库,然后在各种平台上分发所有更新。目前,该库支持跨应用程序的所有依赖库。但是,您应该检查版本兼容性以成功利用.NET Standard。

大社区

.NET拥有庞大的开发人员社区。有趣的是,它将工程师与小型,中型和企业级公司联合起来。这意味着几乎所有问题都可以在社区成员的帮助下解决。

由于.NET Core是开源的,因此它的库,运行时和编译器可以在GitHub上获得,并且有许多贡献。根据Stack Overflow 2018的调查,两款.NET产品被列入最受欢迎的技术:.NET Core排在第四位,Xamarin排在第九位。

最重要的是,有一个名为.NET Foundation的独立组织,它促进围绕.NET生态系统的开放式开发和团队合作。.NET社区和商业开发人员将其用作想法交换的主要论坛。

ASP.NET中的自动监视

ASP.NET具有内置的自动监控功能。Windows Web Server严格监视在其上运行的网页和应用程序。如果发生内存泄漏或无限循环等任何问题,它会立即发出警告。这允许直接纠正这些行为并创建新流程。监控可确保.NET应用程序的更高稳定性和透明性。

.NET开发的缺点

尽管由于广泛的基础架构和成熟的产品开发历史,.NET被认为是最强大的工程平台之一,但它带来了一系列问题。

有限的对象关系支持

如上所述,.NET使用面向对象编程(OOP)语言模型。该模型基于对象而不是“动作”和数据而不是逻辑。实体框架提供了.NET Framework中面向数据的软件应用程序开发的支持。

实体是一种对象关系映射器(ORM),它在面向对象的.NET Framework和关系(SQL)数据库之间架起桥梁。一些工程师认为实体框架不够灵活,可能不支持所有可用的数据库设计。这也意味着在某些时候实体框架可能不支持新的数据库设计。另一个问题是该框架可能最终被微软抛弃,这将迫使您适应供应商建议的一些新技术。

从好的方面来说,我们还没有遇到实体的问题,所以它仍然是一个值得商榷的问题。

供应商锁定

第二个缺点部分与前一个有关。.NET运行并基于Microsoft。虽然.NET Core和Xamarin是开源的,但整个生态系统远非社区驱动。这意味着您的产品仍然依赖于Microsoft提供的供应商和决策。

许可费用

无论开源技术如何,构建.NET应用程序并不便宜。大多数情况下,您的开支将用于Visual Studio IDE以及Microsoft提供的其他协作和质量保证服务,以简化您的工作。截至今天,Visual Studio的基础版本将为一名工程师每年花费539美元。包含各种云,企业移动性,QA功能等的企业版本每年约为3000美元。但是,您仍然可以尝试成为Microsoft合作伙伴,免费获得许多订阅。出于非营利和教育目的,还有免费的  Visual Studio社区。

即使您可以在Mac和Linux计算机上使用.NET Core,最好的方法是使用Windows for .NET工程,这也带来了许可成本。

如果您以前从未使用过Microsoft产品,并且必须从AWS云生态系统迁移到Azure,那么障碍将会更高。

释放与稳定之间的差距

也许,这个问题削弱了所有Microsoft产品而不是.NET堆栈。但它绝对值得一提。新发布的产品缺乏适当的文档,支持,稳定性,并且容易发生剧烈变化。在AltexSoft的一个项目中,我们的架构师决定使用新的DocumentDB(现在是Azure Cosmos DB),但后来被迫设计自定义数据架构,因为该产品遇到了许多可能危及整个项目的技术问题。

Y Combinator的一位用户生动地描述了这个问题:“ 我对这些微软技术传福音文章/视频的问题在于,似乎微软总是让他们的新工作变得热情,并告诉全世界它很棒,并且准备生产。然后你去实现它,一旦你离开他们的演示的完美世界,它一切都崩溃了,然后你发现文档是为测试版编写的,不再适用,所以你只是猜测在你需要的方法的正确的调用签名。“

较小的缺点包括由于封闭系统中的垃圾收集而发生的性能问题。而且,通常,托管环境比直接与硬件通信的环境要慢。

何时使用.NET

可扩展的产品。通常,业务需求正在增长,您的软件必须随之扩展。.NET提供可扩展的环境,允许重新设计正在进行的应用程序,以满足不断增长的业务需求。

跨平台需求。如果您需要可跨平台工作的应用程序.NET将是一个很好的选择,因为大多数平台都已涵盖,您可以在将桌面或移动应用程序扩展到其他操作系统的同时减少开发工作量。最重要的是,.NET可用于游戏(包括Xbox)和AR开发(包括HoloLens)等特定工程案例。

企业级基础设施。.NET是否主要是为企业使用而设计仍然是一个值得商榷的问题。但微软确保提供最广泛的工具集来构建和交叉集成企业产品,包括内部和公共产品。它还支持强大的企业移动生态系统。

 

原文地址:https://www.kingwins.com.cn/content-7050.html

转载于:https://www.cnblogs.com/suqq/p/11130941.html

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

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

相关文章

zkCli使用手册

zkClient命令笔记connect host:port 连接到其他的zk服务器,例:connect 192.168.174.222:2181-------------------------------------------------------------------------------------------------------get path [watch] 获取某个节点的数据&#xff0…

浏览器解析JavaScript的原理

JavaScript的特点一般都知道的就是解释执行,逐行执行,就是从上到下依次执行。 JavaScript的执行之前,其实还是有一些操作的,只是没有表现出来 JavaScript的执行过程: 1、语法检测  首先是大致查看有没有基本的语法错…

实现 tomcat 热加载证书

原文地址&#xff1a;https://my.oschina.net/u/157514/blog/395238 之前一篇中说了如何 建立 https 通信的完整流程&#xff0c;其中涉及了java web容器 tomcat&#xff0c;关于它的配置是&#xff1a; <Connector port"8443" protocol"org.apache.coyote.…

修改yapf中的列宽限制值

yapf是一款由Google开源的Python代码自动格式化工具&#xff0c;它根据PEP 8规范可以帮我们自动格式化我们的代码&#xff0c;让代码更规范、更漂亮。但是其中最大列宽被限制为80&#xff0c;如果超过80&#xff0c;在格式化时就会被yapf换行&#xff0c;随着现在人们的显示器越…

Hadoop64位版本安装后遇到的警告处理

在使用hadoop的过程中&#xff0c;会遇到一个警告&#xff0c;内容如下&#xff1a; WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 对于这个问题网上很多说法是由于系统位数和所下载…

【转】C++类的sizeof大小

转自https://blog.csdn.net/zhengjihao/article/details/77825269 其中有的描述与实际GCC上执行的结果不符&#xff0c;不过其中的分析思路需要掌握。 以下是GCC的实际执行结果&#xff1a; 1 #include <iostream>2 using namespace std;3 4 int *pointer;5 6 class Null…

shiro扩展获得用户登录类型并提供cookie的方式记住用户密码

在最近的项目中要实现一个需求&#xff1a;“同时让两种类型的用户进行登录&#xff0c;登录后如果用户勾选了记住密码就要生成cookie来记录用户的密码和用户名”。本人做安全认证的时候一直在使用shiro&#xff0c;所以就想到在shiro的基础上进行一些扩展来满足需求。 shiro自…

ueditor跨域上传图片文件(基于jsp框架、tomcat)

额&#xff0c;好久没有用到ueditor了&#xff0c;因为现在的相关工作很少涉及到富文本编辑&#xff1b;最近临时带了一个项目&#xff0c;里面要用到富文本编辑器&#xff0c;而且文件要统一上传到文件服务器上保存&#xff1b;应为以前用过ueditor就试着在网上着一些跨域保存…

JavaWeb-RESTful_用SpringMVC开发RESTful

RESTful简介 一种软件架构风格、设计风格&#xff0c;而不是标准&#xff0c;只是提供了一组设计原则和约束条件。 它主要用于客户端和服务器交互类的软件。 基于这个风格设计的软件可以更简洁&#xff0c;更有层次&#xff0c;更易于实现缓存等机制。 RESTful可以理解为一种编…

在storm中使用流

storm是一个强大的流式计算框架&#xff0c;单流的storm在使用中非常普遍&#xff0c;而同时storm也提供对多个流的支持&#xff1b;通过定义多个流&#xff0c;用户可以进一步的把数据发放到不同的流中进行处理。 代码如下&#xff1a; 一、 定义多个流的spout public class…

精选Pycharm里6大神器插件

http://www.sohu.com/a/306693644_752099 上次写了一篇关于Sublime的精品插件推荐&#xff0c;有小伙伴提议再来一篇Pycharm的主题。相比Sublime&#xff0c;Pycharm要强大许多&#xff0c;而且是专为python设计的集成开发环境&#xff0c;所以无论是自身功能、环境配置还是使用…

在storm中使用定时保存

在storm中使用实时保存会对性能带来很大的考验&#xff0c;所以在很多场景中还是使用定时保存&#xff1b;而且storm自带了定时功能&#xff0c;使用方式如下&#xff1a; 首先在topo中的config中定义一个通信时间&#xff0c;定义方式如下&#xff1a; conf.put(Config.TOPOLO…

数字信号处理实验(一)——DTFT

一、离散序列傅里叶变化——DTFT 1、DTFT公式 2、Matlab算法实现 function[X]dtft(x,n,w,flag)%计算离散时间付里叶变换 %[X]dtft(x,n,w) %X在w频率点上的DTFT数组 %xn点有限长度序列 %n样本位置向量 %w频率点位置向量X x * (exp(-j).^(n * w));3、DTFT一些画图代码 function …

修改hadoop中yarn的webui中显示的任务时间为中国时间

在${HADOOP_HOME}\share\hadoop\yarn目录下找到hadoop-yarn-common-x.x.x.jar&#xff0c;然后用winRAR打开&#xff1b; 打开以后结构如下&#xff1a; 进入webapps/static/目录&#xff0c;然后修改yarn.dt.plugins.js&#xff1b;做出如下修改&#xff1a; &#xff08;1&a…

一条语句复制整个目录《转》

使用的是 Delphi 2010 下 IOUtils 单元的 TDirectory.Copy 函数: 1 uses IOUtils; 2 3 procedure TForm1.Button1Click(Sender: TObject); 4 const 5 SourceDir C:\Temp\Folder1; { 源文件夹必须存在 } 6 DestDir C:\Temp\Folder2; { 如果目标文件夹不存在, 程序会自动…

设计模式与重构汇总

面向对象的基本原则&#xff1a;单一原则&#xff1a;引起一个类发生变化的原因只有一个 开放封闭原则&#xff1a;对于类的修改是封闭的&#xff0c;而对于类的扩展是开放的 依赖倒置原则&#xff1a;高层不依赖于底层&#xff0c;都应该依赖与抽象&#xff1b;抽象不依赖于…

转 最小凸包算法(Convex Hull)(1)-Graham扫描法 -计算几何-算法导论

原文地址&#xff1a;http://blog.csdn.net/suwei19870312/article/details/542281 基本问题&#xff1a; 平面上有n个点p1,p2, ..., pn, 要求求出一个面积最小的凸多边形&#xff0c;使得这个多边形包含所有平面上的点。 根据算法导论上提供的两个方法做一些介绍&#xff1a; …

Trident API 概览

Trident API 概览 在网上看到了很多有TRIDENT相关API的翻译&#xff0c;看来看去&#xff0c;总觉得没有说清楚很多东西&#xff0c;所以自己结合使用的经验翻译了一篇出来&#xff1b;翻译完以后&#xff0c;也发现 在自己的翻译中也有很多地方是表达不清楚的不过多少感觉有些…

poj 2406 还是KMP的简单应用

记住KMP是多计算一位的。其中next[i]为不为自身的最大首尾重复子串长度。 位移ji-next[i]可以看作是构成字符串s的字串&#xff08;如果i%j0&#xff0c;存在这样的构成&#xff09;&#xff0c;相应的重复次数也就是n/d。 a b c d * next:-1 0 0 0 0 这时ji-next[i]; …

Trident State译文

Trident State 译文 Trident针对状态化的数据源的读写进行了一流的分装。State可以包含在拓扑中-例如&#xff0c;保存在内存中&#xff0c;有HDFS提供备份-也可以保存在一个外部的数据库中&#xff0c;像Memcached和Cassandra。针对以上的所有情况&#xff0c;Trident的API都…