《ASP.NET Core In Action》读书笔记系列一 ASP.NET Core 的诞生
最近打算系统学习一下asp.net core ,苦于没有好的中文书藉,只好找来一本英文的 《ASP.NET Core In Action》学习。我和多数人一样,学习英文会明显慢于中文。希望与我相同情况的人避免这样的低效,决定把书重要的部分提取出来分享给大家。
ASP.NET Core是微软ASP.NET Web框架的最新版本。于2016年6月发布,相比之前ASP.NET有很多增量更新。 ASP.NET Core通过进行重大的体系结构调整来提高开发人员的工作效率和向后兼容性。重新设计Web框架和构建方式。 ASP.NET Core很多功能来至之前ASP.NET,但它是一个新的框架,整个技术堆栈全被重写,包括Web框架和底层平台。 与其他现代框架相比,它有更新的定位和目标。同时保留以前ASP. NET 的优点。
ASP.NET的优点和局限性
要知道微软决定构建新框架的原因,我们得了解现有ASP.NET Web框架的优点和局限性。
ASP.NET的第一个版本于2002年作为.NET Framework 1.0的一部分发布。相比当时传统的ASP和PHP,ASP.NET Web Forms允许开发人员使用图形设计器、简单的像Windows应用中的事件模型快速创建Web应用程序。但随着时间的推移,web开发生态发生很大的改变。ASP.NET Web Form 遇到了许多问题,尤其是在构建大型的应用程序时,缺乏可测试性,复杂的有状态模型以及对生成复杂的HTML使得客户端开发变得异常困难,这些导致开发人员选择了别的开发平台。为了扭转这种局面,微软于2009年发布了第一版的ASP.NET MVC,它基于MVC模式(模型 - 视图 - 控制器),这种Web设计模式广泛用于Ruby on Rails,Django和Java Spring等框架。它允许UI元素与应用逻辑分离,易于测试,并提供能控制HTML生成过程的能力。ASP.NET MVC自首次发布以来已经进行了四次迭代,但它们都建立在由System .Web.dll库提供的底层框架上,该库是.NET Framework的一部分,包含了ASP.NET在构建web 应用时的所有核心代码,因此它依赖于Windows。这种依赖性既带来了优点又带来了缺点。一方面,ASP.NET框架是一个经过实战考验的可靠平台,是在Windows上构建现代应用程序的绝佳选择。它提供的众多的功能已经多年运用于web应用系统,这是从事windwos web 应用开发人员所熟知的。另一方面,这种依赖性导致它更新速度很慢,至多只能第每年发布一次,因为对System.Web.dll的修改涉及到了NET Framework 。另外它Windows Web主机Internet信息服务(IIS)的耦合,阻止了它在非Windows平台上的使用。
近年来,许多Web开发人员开始关注跨平台Web应用,可以在Windows、Linux和macOS运行的框架。同时,微软也感觉到,是时候创建一个不再依赖于Windows的框架了,于是ASP.NET Core诞生了。
什么是ASP.NET Core?
ASP.NET Core的四个主要目标:
1、跨平台运行和开发;
2、采用模块化架构,便于维护;
3、完全开源;
4、适应当前Web开发趋势,例如:客户端应用程序和部署到云环境;
为了实现这些目标,Microsoft需要一个可以提供 ,用于创建List(列表)和dictionaries(词典)等基本对象,以及执行简单的文件操作的底层库的平台。到目前为止,ASP.NET开发一直专注于,依赖于Windows专用的.NET Framework。对于ASP.NET Core,它是Microsoft创建的一个在Windows上运行的轻量级平台,Linux和macOS称之为.NET Core,如下图所示。
.NET Core与.NET Framework共享许多相同的API,但它更小,目前只实现了.NET Framework提供的功能的一个子集,它提供更简单的实现和编程模型的目标,是一个全新的平台,而不是.NET Framework的分支,尽管它们使用许多相似的API代码。
仅使用.NET Core,就可以构建运行跨平台的控制台应用程序。 微软创建了ASP.NET Core作为控制台之上的附加层应用程序,例如:将控制台应用程序转换为Web应用程序涉及添加的库。如下图所示:
最上面的 .NET Core console 可以运行在 ASP.NET Core web Server中,微软提供了一个跨平台的默认实现--Kestrel, web application 逻辑层在Kestrel中运行, 通过添加相应的类库来增加应用的功能,比如:日志记录(Logging)、Html 生成。
ASP.NET Core由许多小型库组成,可以根据应用的需要添加相应的库,很少有应用会用到所有的可用库。有一些常用的库,几乎会出现在每个应用程序中,例如:读取应用程序 配置文件、日志记录。其他类库可建立在这些基础库之上,例如第三方提供的通过Facebook或Google登录的库。在ASP.NET Core中使用的大多数库都可以在GitHub上(https://github.com/aspnet)找到。例如Kestrel Web Server和日志库、例如第三方认证库以及更多的外围库。所有ASP.NET Core应用程序都将遵循类似的基本配置设计,如基础库那样,但总的来说框架是灵活的,您可以自由定义自己的代码约定。
谢谢你的阅读,下节见!如果期待本系列,请点一下推荐!
《ASP.NET Core In Action》读书笔记系列一 ASP.NET Core 的诞生的更多相关文章
- 《ASP.NET Core In Action》读书笔记系列三 ASP.NET Core如何处理请求的?
在本节中,您将看到ASP.NET Core应用程序如何运行的,从请求URL开始到页面呈现在浏览器中. 为此,您将看到 一个HTTP请求在Web服务器中是如何被处理的.ASP.NET Core如何扩展该 ...
- asp.net MVC4 框架揭秘 读书笔记系列3
IIS/ASP.net管道 本节全部用图形表示便于理解和记忆 1.3.1 IIS5.x与asp.net 1.3.2 IIS 6.0与asp.net 1.3.3 IIS7.0与asp.net 基于IIS ...
- 《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core 解决方案结构解析1
创建好项目后,解决方案资源管理器窗口里我们看到,增加了不少文件夹及文件,如下图所示: 在解决方案文件夹中,找到项目文件夹,该文件夹又包含五个子文件夹 -Models.Controllers.Views ...
- 《ASP.NET Core In Action》读书笔记系列二 ASP.NET Core 能用于什么样的应用,什么时候选择ASP.NET Core
ASP.NET Core 能用于什么样的应用 ASP.NET Core 可以用作传统的web服务.RESTful服务.远程过程调用(RPC)服务.微服务,这归功于它的跨平台支持和轻量级设计.如下图所示 ...
- asp.net MVC4 框架揭秘 读书笔记系列2
1.2 MVC 变体 MVC 是一种Pattern 另外一种说法是ParaDigm 范例 模式和范例的区别在于前者可以应用到具体的应用上,而后者则仅仅提供一些指导方针 1.2.1 MVP Model ...
- asp.net MVC4 框架揭秘 读书笔记系列1
1.1 传统MVC 名词解释 Autonomous View. AV. 自制视图 GUI图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式 ...
- 《ASP.NET Core In Action》读书笔记系列,这是一个手把手的从零开始的教学系列目录
最近打算系统学习一下asp.net core ,苦于没有好的中文书藉,只好找来一本英文的 <ASP.NET Core In Action>学习.我和多数人一样,学习英文会明显慢于中文.希 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
随机推荐
- TestNG 中DataProvider 的用法
使用DataProvider提供数据有两种形式: 第一种:一种是在测试代码和测试数据放在同一个类中: 第二种:把所有的数据提供都单独写在一个类里面,当测试数据比较多时,这种方法利于维护. DataPr ...
- js之promise讲解
1 Promise概述 Promise对象是CommonJS工作组提出的一种规范,目的是为异步操作提供统一接口. 那么,什么是Promises? 首先,它是一个对象,也就是说与其他JavaScript ...
- ECMA Script 6_唯一容器 Set_映射容器 Map
唯一容器 Set ES6 提供了新的数据结构 Set Set 结构没有键名,只有键值(或者说 键名 和 键值 是同一个值) 它类似于数组,但是成员的值都是唯一的,没有重复的值 Set 内部判断两个值是 ...
- laravel之路由和控制器与视图
路由和控制器: : 路由与视图: 访问:
- mysql having和where的区别
having子句与where子句一样,都是用于条件判断的. 区别1 where是判断数据从磁盘读入内存的时候 having是判断分组统计之前的所有条件 区别原理 区别2 having子句中可以使用字段 ...
- SET || BZOJ 1588: [HNOI2002]营业额统计 || Luogu P2234 [HNOI2002]营业额统计
题面:P2234 [HNOI2002]营业额统计 题解:随便写写 注意:cmath中abs函数返回的是一个浮点数,在bzoj上会ce 代码: #include<cstdio> #inclu ...
- F#周报2019年第15期
新闻 Hedgehog新站点 Bolero 0.4发布,增加远程认证 FsToolkit.ErrorHandling与Cvdm.ErrorHandling合并了 F#里的3D图形编程与游戏开发 有趣的 ...
- L1-016 查验身份证 (15 分)【考细心,考flag设置】
一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8, ...
- 与eslint有关的规范
https://cloud.tencent.com/developer/section/1135682 腾讯云的规范还是不错的
- react高阶组件的使用
为了提高代码的复用在react中我们可以使用高阶组件 1.添加高阶组件 高阶组件主要代码模板HOC.js export default (WrappedComponent) => { retur ...