ASP.NET Core技术内幕与项目实战:基于DDD与前后端分离
上QQ阅读APP看书,第一时间看更新

自序

在我从事软件开发工作的近20年里,尽管C#、Java、Python、C等编程语言我都深度应用过,但是C#依然是我最爱的编程语言,.NET依然是我喜欢使用的框架。我的程序员生涯中第一行商业化C#代码写于2007年,我录制的一套.NET视频教程从10年前就在互联网上开始流行,我编写过多本关于Java、C语言的书,但是编写一本关于.NET的书是我这10年以来的梦想,这个梦想现在终于成真了。

我最初构思这本书,是在3年前(即2019年),当时.NET Core已经基本成熟,很多使用.NET Framework的开发人员都对.NET Core感兴趣。由于.NET Core的入门门槛比.NET Framework高了一些,读者需要一本系统讲解.NET Core项目实战的书,因此我从那时开始准备编写本书。

为什么本书用了3年才完稿呢?编写一本关于.NET Core的书并不难,但是编写一本关于.NET Core的好书太难了!如果只是为了编写一本讲解.NET Core的书,我只要照着微软的官方文档去改编一下就行了,但是这样编写出来的书有多大的价值呢?微软的.NET文档所讲的内容已经非常丰富了,我没有必要再去把它们重复一遍。我需要讲解微软官方文档中没有的内容,读者也需要这样的书。本书包括的主要内容如下。

·讲解相关技术背后的原理。

·讲解相关技术应用在哪些场景中。

·讲解相关技术有哪些优缺点。

·讲解相关技术在项目中如何应用。

·讲解真实项目的架构和技术实现。

为了达成上述目标,我在编写本书的时候做了大量的底层源代码的研究工作。比如,在编写2.2节“异步编程”的时候,我翻阅了.NET中异步编程的源代码,以帮助读者更好地理解和应用异步编程;又如,在编写5.3节“表达式树”的时候,我翻阅了EF Core的表达式树翻译引擎,并且实现了一个关于翻译引擎的开源项目,以帮助读者理解表达式树的底层原理。

项目中很多技术的讲解需要基于具有一定深度的实践应用案例,这样才能避免技术的讲解流于表面,因此我在本书中编入了很多具有深度的案例。比如,在依赖注入部分,我通过开发一个配置系统和日志系统,讲解依赖注入是如何把系统组件装配在一起的;又如,在ASP.N ET Core中间件部分,我通过编写一个模仿ASP.NET Core Web API的框架,为读者讲解中间件的实际应用。

在进行软件开发的时候,我们还会遇到很多架构层面的问题。这些架构层面的问题需要落实到技术实现上来解决,而且这些问题在解决的时候并没有绝对的标准答案,而是需要技术人员根据项目的情况进行权衡。在编写关于架构设计相关内容的时候,我不仅把我近20年的软件开发经验进行了汇总,而且在国内外的技术社区中阅读了大量一线开发人员编写的文章,以及很多经典的图书。我把这些业界的实践经验和我自己的项目经验结合起来,最终编写出通俗易懂且实践性强的项目架构指南。比如,我在编写关于REST的内容时,在知乎、Stack Overflow等社区看了大量关于REST实践的帖子,还阅读了罗伊·菲尔丁(Roy Fielding)博士的与REST相关的专著;又如,我在编写关于DDD的内容时,不仅参考了国内外相关技术网站中关于DDD的实践经验,而且参考了Java、.NET等多个应用了DDD思想的开源项目,此外我还阅读了《领域驱动设计:软件核心复杂性应对之道》《实现领域驱动设计》《领域驱动设计与模式实战》等关于DDD的专著。关于架构设计的问题,不同的技术人员有很多不同甚至完全对立的观点。在本书中,我并未罗列所有的观点,我根据自己的项目经验对这些观点进行梳理、分析,最终给出一套我建议的项目架构的技术落地方案。架构设计中的很多概念是非常抽象的,为此,我在本书中给出了读者“拿来就能用”的实践指南。

我害怕自己编写的内容误导读者,因此对于编写的每一句话我都小心求证,对于编写的每一行代码我都进行实践验证,力求把业界的优秀实践经验准确无误地传达给各位读者。我这样力求完美的想法在一定程度上耽误了本书的如期出版。3年间,人民邮电出版社的编辑多次询问“杨老师好,书什么时候写好?”,今天我终于可以说“书写好了!”。

在本书完稿之际,我首先要感谢我自己,悬在自己心头的一块大石头终于落地了,我终于可以去追寻自己的下一个目标了,希望本书能够成为“流传多年的行业经典名著”;然后,我要感谢我的妻子对我的支持,今年是我们相识的10周年,希望我们“幸福和快乐是结局”;最后,我要感谢我的女儿和儿子,每次深夜写作的时候,回头看到他们熟睡的小脸,我都会倍感温暖。

感谢“风起云涌”的IT行业,感谢激发技术人员灵感的开源社区,是它们让喜欢技术的我能用自己最爱的代码参与这个世界的建设。我是杨中科,一名快乐的程序员。

杨中科

2022年3月1日