国外大牛梳理:2024年.NET学习路线全攻略

前言

现在信息量非常大,各类学习资料看得眼花缭乱,找到正确的信息并不是一件容易的事。

当你开始编程之旅并希望有一个全面的指南时,最好找一个能够引导你完成整个过程的指南。

这篇文章将帮助你制定一个学习路线图,教你什么是重要的,应该学习什么。

 GitHub 仓库 TuralSuleymani/DecodeBytes 的(github.com/TuralSuleymani/DecodeBytes/tree/tutorial/dotnet-roadmap)下载一个路线图。

软件基础

软件基础是所有软件的构建模块。它们为理解计算机如何工作、程序如何编写以及如何通过代码解决问题提供了基础。

就像在写小说之前必须学会字母表一样,在成为熟练的程序员之前,理解软件基础是必不可少的。

软件基础涵盖了一些基本的编程知识方面的内容。

  • 算法:算法是一组告诉计算机如何解决问题的逐步指令。学习算法帮助你将复杂问题分解为较小的、可管理的步骤,然后将其转换为代码。

  • 数据结构:数据结构是用于在计算机内存中组织和存储数据的专业格式。理解不同的数据结构(如数组、列表和树)有助于你选择在程序中存储和访问信息的正确方式。

  • 编程范式:对面向对象编程、过程化编程和函数式编程有基本了解,在深入研究这些范式时会对你有所帮助。

软件基础涵盖了数据类型、控制流、变量和运算符等概念。这些是任何编程语言的基本构建块。

  • 数据类型:数据类型定义了变量可以存储的数据种类以及可以对其执行的操作。常见的数据类型包括:

    • 整数(整数)

    • 浮点数(带小数点的数)

    • 字符(单个字母或符号)

    • 布尔值(逻辑值 true 或 false)

    • 字符串(字符序列)

  • 变量:变量是存储在计算机内存中的命名容器。你可以将它们看作标记的盒子,用于存放不同类型的信息。

  • 运算符:运算符是对数据执行操作的符号。运算符有不同的类别,包括:

    • 算术运算符(+,-,*,/)用于执行数学计算。

    • 比较运算符(==,!=,<,>,<=,>=)用于比较值。

    • 逻辑运算符(&&,||,!)用于对布尔值执行逻辑操作。

    • 赋值运算符(=,+=,-=,*=,/=)用于将值赋给变量并同时执行计算。

  • 控制流:控制流语句决定程序指令执行的顺序。它们允许程序根据某些条件做出决策并重复任务。常见的控制流语句包括:

    • 条件语句(if, else, elif):这些语句允许你根据条件是 true 还是 false 来执行不同的代码块。

    • 循环(for, while):循环允许你重复执行代码块一定次数或直到满足某个条件。

软件基础不仅限于核心编程概念。对于 Web 开发,理解这些 Web 基础是至关重要的。

  • Web 协议:这些是管理数据在 Web 上传输的规则。一个关键协议是:

    • HTTP(超文本传输协议):这是 Web 浏览器和服务器之间通信的基础。它定义了请求的方式、数据的格式以及响应的返回方式。

  • HTML 和 CSS 基础

    • HTML(超文本标记语言):HTML 是用于构建网页内容的语言。它使用标签定义文档的布局,告诉浏览器显示哪种类型的内容(标题、段落、图像等)。

    • CSS(层叠样式表):CSS 控制网页的视觉呈现。它允许你对元素进行样式设计,如字体、颜色、背景和布局。

  • Web 服务器和客户端-服务器模型

    • Web 服务器:Web 服务器是存储网页并在请求时将其传送到 Web 浏览器的计算机程序。可以将其视为存放你网站所有信息的图书馆。

    • 客户端-服务器模型:此模型描述了 Web 浏览器(客户端)和 Web 服务器之间的交互。客户端(你的浏览器)发送请求(例如,访问网站)到服务器,服务器处理请求并返回响应(你看到的网页)。

  • 请求-响应过程

    • 请求:用户在浏览器中输入 URL 或点击链接。浏览器将其翻译为包含请求 URL 和任何附加数据(例如,表单提交)的 HTTP 请求。

    • 服务器:浏览器将请求发送到 URL 中指定的 Web 服务器。

    • 处理:服务器接收请求,处理它(检索请求的网页或执行操作),并生成响应。

    • 响应:服务器将 HTTP 响应发送回浏览器。此响应包括请求的数据(HTML 内容)和状态码等附加信息。

    • 渲染:浏览器接收响应,解释 HTML 代码,并根据包含的样式(CSS)显示网页。

理解这些 Web 基础和软件基础为构建 Web 应用程序提供了坚实的基础。有了这些知识,你可以继续学习更高级的 Web 开发概念和编程语言。

d0aa850b79fc6bca32941eb466884be9.png

学习 .NET 基础

在深入研究 C# 之前,了解框架和运行时本身会更好。

.NET 基础

理解 .NET 运行时的基本概念在深入研究 C# 之前肯定是有益的。这里有一些核心概念。

  • CLR(公共语言运行时):CLR 是 .NET 框架的核心。它是管理 .NET 代码执行的虚拟环境,处理内存管理、安全性和垃圾回收等任务。

  • 清单:清单是 .NET 程序集中(如 .dll 文件)包含元数据的文件。它包括程序集名称、版本、对其他程序集的依赖关系和安全信息等。

  • 元数据:元数据本质上是关于程序的数据。在 .NET 世界中,它描述了代码中定义的类型、方法和资源。CLR 使用这些元数据来理解程序的结构并正确执行它。

  • IL 代码(中间语言):C# 代码不会直接在计算机硬件上运行。相反,C# 编译器将你的代码转换为称为 IL(中间语言)的一组特殊指令。这些 IL 代码设计为可移植的,可以在任何具有兼容 CLR 的系统上运行。

  • JIT(即时编译):JIT 编译器是 CLR 的一个组件,它将 IL 代码转换为特定于处理器架构的机器码(本机代码)。这种转换在运行时进行,因此称为即时编译。

  • FCL/BCL(框架类库/基础类库):这些术语经常互换使用。它是预编写类和功能的集合,提供文件访问、数据库交互、网络等常见操作。这些库通过提供常见编程任务的预构建解决方案为你节省时间。

  • CLI(公共语言基础结构):这是一个更广泛的规范,定义了在 .NET 平台上创建和运行程序的标准。它包括 CLR、库和用于构建和部署 .NET 应用程序的工具。

理解这些概念将使你对 C# 代码在幕后如何工作的有更深的理解。你可以从学习 C# 语法、变量、数据类型和控制流的基本概念开始。这将为你理解如何编写代码打下基础。然后,你可以深入了解 .NET 运行时概念,以巩固你对平台的理解。

0f39ac2dc4d90c072a6b92406bdd4db6.png

学习 C#

C# 基础知识

这是基础。确保你掌握核心概念,如变量、数据类型(int、string、bool 等)、运算符(+、-、*、/)、控制流语句(if/else、for、while)以及类、记录和结构体等基本构建块。

面向对象编程实现

面向对象编程(OOP)是.NET中的一个关键范式。在这里,你将学习封装(数据隐藏)、继承(从父类创建子类)、多态(对象对同一消息作出不同响应)和抽象(专注于对象的行为而不是实现细节)等概念。

接口

接口定义了类必须遵循的契约。它们对于松耦合(依赖功能而不是特定实现)和促进代码灵活性至关重要。

委托和事件

委托是函数指针,允许你将方法作为参数传递。事件是对象之间的通信机制,通知感兴趣的对象在某事发生时采取行动。

泛型

泛型允许你创建可以处理各种数据类型的代码,而不会损失类型安全性。这促进了代码的重用和可维护性。

异常处理

异常是程序执行过程中发生的错误。学会如何使用 try/catch 块优雅地处理异常,以防止应用程序崩溃并提供详细的错误消息。

方法扩展

方法扩展允许你在不修改原始代码的情况下向现有类添加功能。这是提高代码可读性和可维护性的强大技术。

Entity Framework Core(EF Core)

EF Core 是一个对象关系映射器(ORM),简化了.NET应用程序中的数据访问。它允许你使用C#对象与数据库进行交互,减少了对原始SQL查询的需求。

LINQ

语言集成查询(LINQ)是一种强大的语法,用于使用C#语法查询各种来源(数据库、集合、XML)。这使得数据操作更加简洁和可读。

函数式编程

函数式编程强调不可变性(数据不会改变)和纯函数(对于相同的输入始终返回相同的输出)。虽然不是.NET的核心部分,但理解这些概念可以提高代码的清晰度和可维护性。

数据表示

学习如何处理不同格式的数据,如XML(可扩展标记语言)、JSON(JavaScript对象表示)和文件。这对于数据交换和持久化非常重要。

并发性

并发处理涉及处理同时发生的多个任务或操作。它包括异步编程(在不阻塞主线程的情况下执行任务)、并行编程(同时执行多个任务)和多线程(使用多个线程以提高性能)。

同步和线程安全

在处理多个线程时,同步访问共享资源非常重要,以避免竞态条件(由于未协调的访问导致的意外结果)和死锁(线程无限期等待彼此)。学习上下文切换、同步原语(锁、互斥体)以及如何实现线程安全的代码。

任务并行库(TPL)

TPL 是.NET中一组类和工具,简化了并行编程任务。它提供比直接管理线程更高级别的抽象。这份路线图为成为.NET开发人员奠定了坚实的基础。记得练习并实施项目以巩固你的理解。有许多在线资源和教程可以帮助你在这一过程中前行!

5a82bb1752dda41458c304541a1317b6.png

.NET 技术

ASP.NET Core

这是用于在.NET中构建现代Web应用程序的核心框架。它是开源的、跨平台的(可在Windows、macOS和Linux上运行),并且具有高性能。它为使用不同UI范例构建各种Web应用程序提供了基础。

ASP.NET Core Web API

这是ASP.NET Core内部的一个子框架,专门设计用于构建Web API。它擅长创建RESTful API,以结构化方式向其他应用程序(如移动应用、单页面应用等)提供数据和功能。

ASP.NET Core Razor Pages

Razor Pages是在ASP.NET Core内构建Web应用程序的轻量级模型。它结合了HTML和C#代码(使用Razor语法),创建动态Web页面来处理用户交互和数据访问。对于简单的Web应用程序或快速原型,这是一个不错的选择。

ASP.NET Core MVC

模型-视图-控制器(MVC)是用于构建Web应用程序的经典架构模式。ASP.NET Core MVC提供了一种结构化的方式来分离模型(数据)、视图(展示)和控制器(处理用户请求),与Razor Pages相比,对于复杂应用程序提供了更多控制和灵活性。

SignalR

SignalR是用于ASP.NET Core的实时通信库。它实现了服务器与客户端(Web浏览器、移动应用程序)之间的双向通信,支持实时更新、聊天应用和协同编辑等功能。

WPF(Windows Presentation Foundation)

WPF是用于构建具有丰富视觉效果和用户体验的桌面应用程序的UI框架。它专为Windows平台设计,允许创建具有自定义控件和动画的视觉上令人满意的应用程序。

Blazor

Blazor是一个相对较新的UI框架,允许您使用C#而不是JavaScript构建Web UI。它提供两种主要模型:Blazor WebAssembly用于专注于Web性能的单页面应用程序,以及Blazor Server用于服务器端渲染并支持实时更新。

选择适合的技术

选择最适合您项目的技术取决于您的具体需求。以下是一个快速指南。

  • 对于Web API:使用ASP.NET Core Web API。

  • 对于简单的Web应用程序或原型:考虑使用Razor Pages。

  • 对于具有明确关注点分离的复杂Web应用程序:选择ASP.NET Core MVC。

  • 对于实时通信功能:集成SignalR。

  • 对于Windows桌面应用程序:使用WPF。

  • 对于使用C#而不是JavaScript的Web UI:探索Blazor(根据需求考虑WebAssembly或Server)。

0a4b055c7150578b97e44cf0d5568937.png

.NET 开发人员的数据库技能

数据库技能因项目而异。我参与过不同的项目,其中一些对数据库有深入的需求。

1、关系型数据库主题

连接(Joins):这是从关系数据库中检索多个相关表中数据的基本概念。不同的连接类型(内连接、左连接等)允许您指定如何基于关系匹配和检索不同表的行。

公共表达式(CTEs):这些是在SQL查询中定义的临时命名结果集。它们可用于简化复杂查询,并通过将逻辑分解为更小、可重用的步骤来提高可读性。

数据透视(Pivoting):这种技术将数据从行转换为列,通常用于数据汇总和报告。它允许您以不同的格式呈现数据,以便更轻松地进行分析。

视图(Views):视图是基于底层表或其他视图的虚拟表。它们提供了一种定制的方式向用户公开数据,而不直接授予对基本表的访问权限。

函数(Functions):这些是可重用的SQL代码块,执行特定操作。它们可以接受参数并返回值,提高代码的可重用性和模块化。

存储过程(Stored Procedures):存储过程是预编译的SQL代码,存储在数据库服务器上。它们可以接受参数、执行复杂逻辑,并提高频繁使用操作的性能

DDL(数据定义语言)操作:这些是用于定义数据库结构的SQL语句,如创建表、列、索引和约束。

索引(Indexes):索引是特殊的数据结构,通过按特定顺序组织数据来加速数据检索。选择正确的索引可以显著提高查询性能。

分组和聚合(Grouping and Aggregation):分组允许您基于特定列对数据进行分类,然后使用聚合函数(SUM、COUNT、AVG等)对这些组内的数据进行汇总。

使用XML/JSON工作:关系数据库可以存储和操作XML和JSON数据。这允许与其他系统交换数据,并在关系模型内处理半结构化数据。

2、NoSQL 主题

灵活的数据模型:与具有固定模式的关系数据库不同,NoSQL数据库提供了灵活的数据模型,可以适应具有不同结构的数据。这对于存储不适合关系结构的数据非常有用。

可扩展性:NoSQL数据库通常设计为水平扩展,意味着可以添加更多服务器来处理增加的数据量和用户请求。这与关系数据库常见的垂直扩展(升级硬件)形成对比。

高可用性:NoSQL数据库通常优先考虑高可用性,确保最小的停机时间和持续的运行,即使在服务器故障期间也是如此。它们通过复制(在多个服务器之间复制数据)等技术实现这一点。

最终一致性:与保证所有副本立即一致的关系数据库不同,NoSQL数据库可能表现出最终一致性。这意味着数据更改可能需要一些时间在所有副本之间传播,但最终所有副本将保持一致。

不同类型的 NoSQL 数据库:有多种NoSQL数据库类型,每种类型都有其优势:

  • 文档数据库:将数据存储为类JSON文档,适用于管理层次数据。(例如 MongoDB)

  • 键值存储:基于唯一键提供非常快速的查找,非常适合简单数据,如用户配置文件或购物车项目。(例如 Redis)

  • 列族存储:按列而不是行组织数据,适用于处理具有频繁访问列的大数据集。(例如 Cassandra)

  • 图数据库:将数据存储为节点(实体)和它们之间的关系,适合表示社交网络或推荐系统。(例如 Neo4j)

了解关系型和NoSQL数据库可以让您作为.NET开发人员根据项目的具体需求选择合适的工具。

9e0277216e13da53cb4416d7c7a6f0eb.png

.NET 开发人员的消息传递和流处理工具

这些工具促进应用程序内部或微服务之间的异步通信。它们使应用程序能够可靠高效地发送和接收消息,将消息发送者与接收者解耦。这提升了分布式系统的可伸缩性、容错性和松耦合性。

Azure Service Bus (ASB):这是微软提供的基于云的消息传递解决方案,支持队列、主题、事件中心和中继服务。它与其他Azure服务集成良好,并为.NET应用程序提供可靠且可扩展的消息平台。

RabbitMQ:这是一个流行的开源消息代理,实现了高级消息队列协议(AMQP)。它以其灵活性、可靠性和易用性而闻名。.NET开发可使用提供的客户端库进行开发。

MassTransit:这是一个强大的开源服务总线,专为.NET开发设计。它简化了构建利用消息队列的应用程序,并与RabbitMQ和Azure Service Bus等多种消息代理集成良好。

Apache Kafka:这是LinkedIn开发的分布式流处理平台。它在处理高容量实时数据流方面表现出色,支持消息持久化、分区和复制。有.NET客户端库可用于与Kafka集群交互。

AWS Kinesis:这是亚马逊Web服务提供的托管服务,用于处理实时数据流。它提供多个组件,如Kinesis Data Streams用于摄取数据,Kinesis Firehose用于将数据传递到其他目的地(例如S3),以及Kinesis Data Analytics用于实时数据处理。有.NET SDK可用于与AWS Kinesis进行集成。

选择合适的工具

选择最适合您特定需求的工具。以下是一个基本指南:

  • 对于与Azure服务紧密集成的基于云的消息传递:考虑Azure Service Bus。

  • 对于开源灵活性和支持AMQP:探索RabbitMQ,并使用像MassTransit这样的.NET客户端库。

  • 对于处理高容量实时数据流并且偏向于.NET开发:考虑使用MassTransit或带有.NET客户端库的Apache Kafka。

  • 对于在AWS云内进行实时数据流处理:使用AWS Kinesis及其.NET SDK。

这些工具将帮助您构建现代化、可扩展和可靠的.NET应用程序,通过消息传递和流处理提升应用程序的性能和可伸缩性。

9d3f9fd119c2c91a25238eb1da51de6c.png

容器化和编排

在现代.NET开发中,特别是在云基础部署或微服务架构中,Docker和Kubernetes发挥了重要作用。以下是这些工具对.NET开发的影响。

使用Docker进行容器化

打包和部署:Docker允许您将.NET应用程序(代码、依赖项、库)打包成一个轻量、可移植的单位,称为容器。这种容器化的应用程序可以在不同环境(开发、测试、生产)中一致地部署,而不受底层操作系统的影响。这简化了部署流程并优化了开发工作流程。

隔离和一致性:每个Docker容器都在与其他容器隔离的环境中运行,确保应用程序不会相互干扰或依赖于其他容器的资源。这有助于保持应用程序在不同环境中的一致性和可预测性。

版本控制和CI/CD:Docker镜像可以使用Docker Hub或私有仓库进行版本控制。这使得在需要时可以轻松回滚到先前的版本,并且与持续集成/持续交付(CI/CD)流水线结合使用,实现自动化构建和部署。

使用Kubernetes进行编排

管理多个容器:虽然Docker适用于构建单个容器,但Kubernetes在管理和编排多个容器的部署方面表现突出,这些容器共同作为一个系统运行(通常称为微服务)。它自动化任务如容器扩展、负载均衡和健康检查,确保应用程序具备高可用性和可伸缩性。

声明式配置:Kubernetes采用声明式方法,您定义应用程序的期望状态(副本数量、资源分配等),Kubernetes负责实现和维护这种状态。这简化了部署管理并减少了配置错误。

云无关性:Kubernetes设计与云无关,意味着您可以在各种云平台上部署容器化的.NET应用程序(如Azure Kubernetes服务、亚马逊弹性Kubernetes服务、Google Kubernetes引擎),甚至可以在本地部署,例如使用Rancher等工具。

.NET开发人员的好处

加快开发周期:容器化和编排通过简化部署和管理流程,提升了开发工作流程的效率。开发人员可以集中精力编写代码,减少基础设施配置的需求。

提升可扩展性:借助Kubernetes,扩展.NET应用程序变得更加容易。您可以根据需求定义运行容器化应用程序实例的数量,从而实现高效的资源利用。

提高可靠性:Kubernetes提供自愈和自动回滚等功能,增强了.NET应用程序的整体可靠性和弹性。

学习曲线

尽管Docker和Kubernetes提供了显著的优势,但使用它们需要一定的学习曲线。然而,有许多资源和教程可帮助.NET开发人员快速入门容器化和编排技术。Docker和Kubernetes是强大的工具,它们可以显著提升.NET开发人员的开发和部署体验。通过利用容器化和编排,您可以构建并部署现代化、可扩展和可靠的.NET应用程序。

75925ae5bf0cf8be6853fc5975b6def0.png

版本控制和测试

版本控制: Git是一种分布式版本控制系统(DVCS),允许您跟踪代码库随时间变化的所有更改。它创建了所有更改的历史记录,使您能够在必要时回退到先前的版本,有效地与其他开发人员协作,并保持项目演进的清晰记录。

协作: Git促进了在同一项目上工作的开发人员之间的无缝协作。多个开发人员可以同时在代码库的不同部分工作,合并其更改而无冲突,并管理用于新功能或错误修复的不同分支。

分支和合并: Git的分支功能允许您创建代码库的隔离副本(分支),以便在不影响主代码库(主分支)的情况下尝试新功能或错误修复。当准备就绪时,您可以将特性分支的更改合并到主分支中。

代码共享: 像GitHub或Azure Repos这样构建在Git之上的平台,促进了开发人员和社区之间的代码共享。您可以公开或私下共享您的代码,参与开源项目的协作,并访问大量现有代码和库的存储库。

ff6d3a94df17fa7ecb375fa1bfd33226.png
测试(单元测试、端到端测试和集成测试)

质量保证: 测试是确保.NET应用程序质量、可靠性和功能性的重要实践。它有助于在开发过程的早期阶段识别错误、回归和潜在问题,从而节省长期的时间和精力。

测试类型:

  • 单元测试: 单元测试专注于应用程序中的孤立单元(方法、类)。它们验证这些单独单元的预期行为,使用诸如NUnit、xUnit或MSTest等框架通常由开发人员编写单元测试。

  • 集成测试: 集成测试评估应用程序的不同模块或组件之间的交互方式。它们确保这些组件之间的数据流和通信正确。集成测试可能涉及比单元测试更复杂的设置。

  • 端到端测试(e2e测试): 端到端测试模拟真实用户与整个应用程序的交互,验证其从头到尾的整体功能。它们通常涉及测试用户界面、数据库交互和外部API等。工具如Selenium或Cypress在e2e测试中非常流行。

1fec235bf27baaf444c703661a1b1ec0.png

持续学习

编程是一项不断发展的技能。保持持续学习和实践是成功的关键。

  • 学习资源:利用在线课程、博客、书籍和文档来保持最新。参加技术社区和会议,与其他开发者交流经验。

  • 项目实践:通过实际项目来应用你学到的知识。这将帮助你巩固技能,并建立一个展示你能力的项目组合。

  • 代码审查和反馈:与其他开发者进行代码审查,并接受他们的反馈。这将帮助你改进代码质量,并学习新的编程技巧。

通过持续学习和实践,你将不断提高你的编程技能,并在软件开发领域取得成功。

总结

成为.NET开发人员不仅仅是学习C#语言语法。它需要掌握越来越多的工具和技术。您应该理解开发生态系统,而不是固守具体的语言。这需要大量的时间和热情。因此,请保持持续学习!

转自:莫小星

链接:mp.weixin.qq.com/s/JrfYC2Gqkd27gVflAj7L5w

- EOF -

技术群:添加小编微信dotnet999

公众号:dotnet讲堂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值