前几天拿到了杨中科老师的新书《ASP.NET Core 技术内幕与项目实战》,迫不及待的“两”口气读完了。用一句话来总结,这是一本写给.NET开发者的非常实用接地气的好书,感觉有必要自发为这本书宣传一波。

杨老师在 .NET 开发者社区中的知名度非常高,很多年前就发布了一系列的 .NET 学习教程,造福了众多开发者。我自己也写blog,深知要把技术讲的通俗易懂是非常有难度的。而杨中科老师的视频在社区中非常流行,全网几十万粉丝,也算技术社区的网红了,证明杨老师在技术培训领域的深入功底。去年我提名了杨老师申请微软MVP奖项,很顺利就通过了,这也是微软对杨老师多年来对技术社区贡献的一种肯定,其实这个奖项早就应该给了。

得知杨老师在写书之后,一直期待这本书的问世。没想到这本书竟然花了三年时间,但算上作者已经近18年的开发经验,可谓“十年磨一剑”。这本书结合了作者多年来的软件开发实战经验,非常适合已经入门的 .NET 开发者作为进阶提高的必读书目。接下来谈一下我对本书的看法。

语言通俗生动,不枯燥。

技术书往往容易陷入繁杂的理论细节而让读者感到枯燥。特别是涉及到某个细节或者原理的时候,用一些特别高大上的名词会非常拗口。而这本书的用词非常通俗易懂,而且贴合生活实际。如本书讲解 DDD 应用,书中讲到:

DDD并不是一个技术,而是一种架构设计的指导原则。……DDD就像烹饪中餐时“盐少许、油少许”一样让人难以捉摸。……不同的人对DDD的理解及对DDD概念落地的理解有所不同,并不存在绝对的错与对,在情况A下成功的DDD实战经验放到情况B下可能就会失败。正如古人所说“橘生淮南则为橘,生于淮北则为枳”,读者不要在众多的对DDD解读的文章中迷失,也不要执着于寻找根本就不存在的“DDD最佳实践”,而要认证聆听各方的解读,并且根据项目的自身情况来个性化地实现DDD的落地。

这种形象化的比喻在书中比比皆是,非常容易让读者理解作者想要传达的意图。我想可能是因为杨老师已经出版了多本技术类的书籍,想来写作已经是驾轻就熟了。

深入原理——How 和 Why

技术书籍的写作,有一点是不要照抄文档。因为官方文档对各个 API 怎么使用已经有了详细的讲解。那为什么还需要书呢?因为文档只是告诉开发者这个技术怎么用,往往很少去解释为什么。而这本书解释了很多技术背后的原理,适用哪些场景,以及各自的优缺点,有哪些需要注意的问题。比如 IQueryable 这个接口,我们都知道 IQueryableIEnumberable 是不同的,那底层的具体实现有何区别?在书中详细解释了 IQueryable 是如何调用 DateReader这个底层方法来进行查询的,并通过几段代码演示了底层查询的过程,还讲解了在哪些场景下应该使用 IQueryable。这种层次的剖析不但可以让读者知道怎么使用它,还可以更加深入的了解为什么要这么做。

由浅入深,循序渐进

很多技术的发明或应用,并不是突然出现的,而是为了解决某个问题。比如说到缓存,我们都知道缓存可以提高性能,缓存又有不同的类型,比如客户端缓存和服务端缓存。那具体到不同的缓存类型,是为了解决什么问题呢?本书详细解释了问题的场景,并一步步引导读者去理解为什么要使用缓存。从HTTP支持的客户端缓存开始,然后到服务器端的响应缓存,而服务器端的缓存由单机的内存缓存开始,逐步去解决分布式缓存的问题。然后又遇到缓存穿透和缓存雪崩等问题,最后还提供了一个封装分布式缓存操作的实际案例,这一步步的问题+解决方案的方式,让读者跟随作者思路对如何应用缓存有了更深入的理解,从而可以应用到自己实际的项目中。

贴合实际,不拘泥于教条

本书我感觉最大的一个特点,就是非常接地气。理论是必须的,但理论不是教条,而应该根据实际情况灵活应对。在读到本书中关于 RESTful 的章节时,我感觉书中描述的实践其实并不是非常符合 RESTful 的定义,特别是在路由中使用动词的设计。但书中提到了:

REST 概念是用来指导我们设计接口的,而不是给开发带来麻烦的,不能因为要通过 RESTful 风格而影响开发进度及系统的稳定。……因此在进行项目开发的时候,需要根据项目特点、公司人员等多方面情况,确定一个符合项目情况的定制版 RESTful 规范。……

这种思路我是非常支持的。国外提出的某些理论,并不一定是要严格遵守的规范。只要团队内部有统一的认识,能够支持项目的开发,就可以成为良好的实践。书中对错误处理的 “200 派” 和 “4xx 派”也进行了相当精彩的描述,可以说这些内容都是来源于作者丰富的一线经验,而不是仅仅局限在某些理论中。

引纲挈领,以实际项目支撑

书中讲述了很多作者多年来的实战经验,更难为可贵的是,这些经验不是停留在泛泛的文字之中,作者甚至开发了多个 NuGet 包,并概要介绍了实现的关键代码。这说明作者完全不是空口无凭的理论派,而是具有丰富经验的实战派。比如用于 EF 批量操作的包、管理分布式缓存的包、读取数据库配置的包等等,这些都是已经发布到 NuGet 的开源项目,完全经得起实际应用的考验。更令我佩服的是,最后的项目案例章节中,完整讲述了作者开发的英语学习网站的技术细节,这是一个真正在运行的项目,据我所知已经有很多用户了。这种案例,当然比简单的图书管理系统或订单管理系统更有说服力。

其他

我也在写一本关于 ASP.NET 的书,但我感觉很难比杨老师写的更好。这本书也给我指明了方向,就是如何写一本让读者读得进、读得懂、读完大有收获的书。特别是本书关于 DDD 的章节,写的非常通俗易懂,我读了之后也感觉颇有收获。如果硬要说本书的不足,我感觉可能是因为本书重点关注开发的原因,对程序部署、监控、日志等内容涉及不多,比如如何容器化、如何实现 CI/CD、如何利用云原生平台等,其实严格说这些属于 DevOps 的范畴,值得写另一本书了。这可以算我鸡蛋里挑骨头吧。8-)

广告

最后再打个硬广,如果您对杨老师的书感兴趣,或者想与杨老师直接交流,或者只想听听什么是 DDD,那么机会来了,7月28日晚7点(新西兰时间)我们CITA NZ(新西兰华人 IT 协会)将邀请杨中科老师做一期讲座,名为“接地气的 DDD (领域驱动设计)实战指南”,线上活动,欢迎大家参加。在本公众号回复 DDD 即可获取报名链接。

这本书已经在各大电商上架,推荐 .NET 开发者快快下单吧!点击下方京东链接可直接下单。纯自发广告,杨老师请尽快付我广告费“少许”,谢谢。

ASP.NET Core 技术内幕与项目实战读后感相关推荐

  1. 《ASP.NET Core技术内幕与项目实战:基于DDD与前后端分离》读后感一

    由于自己菜鸡,只能任由社会摆布,自学一段时间JAVA想去找JAVA工作,突然一份.NET Core的工作摆在面前,还好有点学历,虽然C#已经不太记得,领导仍然放我进去了.开始的一段时间,各种摸项目,也 ...

  2. 【笔记】ASP.NET Core技术内幕与项目实现:基于DDD与前后端分离

    最近在写论文,想使用ASP.NET Core Web API技术,但对它还不是很熟,鉴权组件也没用过,于是在网上查找资料,发现了杨中科老师写的这本书(微信读书上可以免费看),说起来我最初自学C#时看过 ...

  3. ASP.NET Core 2.0 MVC项目实战

     一.前言 毕业后入职现在的公司快有一个月了,公司主要的产品用的是C/S架构,再加上自己现在还在学习维护很老的delphi项目,还是有很多不情愿的.之前实习时主要是做.NET的B/S架构的项目,主要还 ...

  4. 52abp框架asp.net core Angular全栈开发实战视频课程

    课程标题 52abp框架asp.net core & Angular全栈开发实战视频课程 课程简介 从零开始学 52ABP企业开发框架,企业项目是如何开发和技术选型,代码如何管理,团队协同开发 ...

  5. 《ASP.NET Core 与 RESTful API 开发实战》-- (第10章)-- 读书笔记

    第 10 章 部署 10.1 部署到 IIS ASP.NET Core 应用程序支持部署到 IIS 中,之后它将作为应用程序的反向代理服务器和负载均衡器,向应用程序中转传入的 HTTP 请求 默认情况 ...

  6. ASP.NET CORE 微服务(简化版)实战系列-没有比这性价比再高的实战课程了

    ASP.NET CORE 微服务(简化版)实战系列,最后1天298,现在注册购买再减50.作者jesse 腾飞在2.14 早上我买了他的课程后,他才做了下面这个活动: 作者jesse 腾飞花了大量的时 ...

  7. ASP.NET Core 2.0 : 三. 项目结构

    ASP.NET Core 2.0 : 三. 项目结构 原文:ASP.NET Core 2.0 : 三. 项目结构 本章我们一起来对比着ASP.NET Framework版本看一下ASP.NET Cor ...

  8. ASP.NET Core Web多语言项目

    公司效益好了,准备和国外做生意,这个时候就需要多语言了. > 1. 这是一个ASP.NET Core Web多语言项目,主要展示项目的不同: > 2. 第一种:www.xxx.com/en ...

  9. ASP.NET Core MVC 6.0项目的文件夹结构

    介绍 在本文中,我将向您解释 ASP.NET Core MVC 6.0 Web 应用程序的默认文件夹结构,并描述每个文件夹的用途. 使用以下链接阅读我以前的文章. 如何创建 ASP.NET Core ...

最新文章

  1. Matlab中只运行m文件中部分程序的方法
  2. crontab详解及实例
  3. Unicode字符集下WriteFile中文处理
  4. 社区不支持HTML,popover不支持html内容吗?
  5. SpringCloud教程 | 第三篇: 服务消费者(Feign)
  6. 微软 WPF 框架源码现已托管至 GitHub
  7. 从头开始学JavaScript (四)——操作符
  8. 前端实现用户自定义建表_Excel、SQL、Python分别实现行列转换
  9. Gartner预测:2010年个人电脑销售增长两成
  10. CTF取证总结(内存取证,磁盘取证)以及例题复现
  11. JAVA课程设计——医院挂号系统
  12. 无人机飞控 ardupilot Copter-4.0.7 库示例
  13. 微信发布的辟谣小程序
  14. 上证指数(000001)股票历史数据,下载上证指数(000001历史数据
  15. 电子表整点报时怎么取消_歪果仁怎么说“我被放鸽子了”?这可跟鸽子没关系哦...
  16. 基于单片机的电子琴系统设计(#0424)
  17. java判断浏览地址是手机还是pc,判断是手机还是PC浏览器的方法
  18. SAP一共有多少模块?
  19. 王喆老师 Sparrow Recsys项目跟读
  20. 官网下载Tomcat步骤

热门文章

  1. 在Unity3D中使用泛型(上)
  2. 带你领略3D转换的魅力~
  3. 微信无法定位 请打开定位服务器,微信定位是灰色的点不开是怎么回事?该怎么解决问题呢?...
  4. 希尔顿逸林品牌聚焦亚太市场,推进全球扩张式发展
  5. 离谱的bug564v*/92ray
  6. android微信列表滑动删除,Android仿微信对话列表滑动删除效果
  7. 获取米家设备token
  8. 《谁说菜鸟不会数据分析》学习笔记 第一章总览 第二章数据分析思路
  9. 程序异常终止:Process finished with exit code -1073741819 (0xC0000005)
  10. win10右键文件夹无反应