工良出品,从零设计开发 .NET 开发框架:框架源码和教程电子书
为什么要写这个教程
在毕业之后,读者写过了大量的文章和开源项目,正是坚持一边学习一边输出,所以笔者最终从一个生菜鸡进化为一个熟菜鸡。
在程序员的成长中,我们会在思路,如何学习、如何进步,比如要成长为一个架构师,需要具备什么样的能力。比如说技术能力,技术能力是最核心的基础,那么我们技术上要达到哪种程度?可以手撸框架?脚踢汇编、拳打微服务架构?
常常会有技术社区朋友和读者进行交流,很多读者不知道怎么学习。笔者也是,我也不知道怎么学,各类东西都在学、都在搞,还没有确定要专门做什么,比如最近在学 AI。年轻人,总是很迷茫,未来的出路在哪里?可能是一夜暴富。
回归正题,之所以写这个教程,一则是笔者比较喜欢将技术、思考、知识都沉淀到代码和文档中,同时基于开源精神,与大家分享这些东西,所以花了很多时间,编写这个开源项目和技术文档。笔者常常会编写一系列比较长的文章、电子书,因为长系列的教程可以获得完整、系统的知识,而短小、零散的文章不利于读者学习、归纳知识。写长文章是很累的,而教程完全开源,所以喜欢本系列教程的读者们,不妨到仓库点亮一颗星星。
转载请保留出处。
关于从零设计 .NET 开发框架
作者:痴者工良
仓库地址:https://github.com/whuanle/maomi
作者博客:
https://www.cnblogs.com/whuanle
项目和教程介绍
Maomi 框架是一个简单的、简洁的开发框架,除了框架本身提供的功能之外,Maomi 还作为一个易于阅读的开源项目,能够给开发者提供设计框架的思路和代码。
Maomi 框架目前具有模块化和自动服务注册、多语言、事件总线、Web 四个模块。而整个解决方案中一共有 62 个项目,包括了日常部分框架的编写示例,例如怎么制作类似 dotnet-dump 的诊断工具、怎么定制日志框架以及怎么写一个日志框架、怎么使用 EMIT 写一个 AOP、怎么使用 Roslyn 写一个代码编译器、怎么设计类似 ABP 的模块化等,还包括了单元测试。
本教程主要分为四个部分:
- 基础知识,首先介绍开发这类框架的基础知识,一些抽象和原理,但是不会深入探讨源码和细节,避免造成阅读困难。
- 设计和抽象,想要开发一个框架时,不要急着写代码,要思考需要做什么,然后怎么抽象接口。
- 开始编码,开始落实编码,享受撸码的快乐。
- 扩展技术,单元测试、性能测试、制作 nuget 包、制作工具包等等。
本教程一个有六十多个项目,每篇文章基本都会指导读者如何开发对应的框架,每章都会有大量的示例,并且这些示例都可以在仓库中找到,避免读者阅读文章源码时,不知道怎么创建项目和跑示例,读者可以直接下载仓库源码示例慢慢调试、理解代码。
如果你想从零编写一个自己的开发框架,那么本教程非常适合你,本教程囊括了 .NET 开发中常见的各类框架知识以及实现原理,每一章都是的一部分,可以只挑感兴趣的部分看,希望可以帮助你学习、了解怎么编写各类框架。
以下是教程目录:
-
讲解 Maomi.Core 的使用方法和基本原理
-
讲解 Maomi.Core 是如何设计和实现,我们想开发一个框架时,怎么从设计、抽象、编码到最后实现。讲解了模块化和自动服务注册的原理,如何从零开发,最后制作 nuget 包,分发到 nuget.org 给所有人使用。
-
介绍故障诊断的一些方法,以及 .NET 中的日志抽象接口。
-
如何自己设计、开发一个日志框架。
-
非常推荐阅读,介绍了 Serilog 的配置、使用方法,介绍了生命周期作用域、属性、日志模板等相关说明,以便在程序运行时,输出非常高效的日志,为排查问题带来方便。很多开发者使用日志都很敷衍,不知道怎么利用好日志工具,那么这篇文章可以帮到你。
-
介绍一些 .NET 诊断的方法和原理,然后介绍如何开发 dotnet-trace、dotnet-counters、dotnet-dump 等这样的工具,没错,我们也可以写出这样的工具!
-
简述了 IConfiguration 、Options 的原理和使用方法,自定义配置提供器、使用 signalR 实现一个配置中心。
-
本章的内容比较丰富,讲解了 .NET 下序列化和反序列化的一些特征、自定义配置、使用技巧,如何自定义枚举转换器、字符串转换器、时间格式转换器等,详细讲解了实现细节。最后介绍了 Utf8JsonReader 和怎么编写性能测试代码,通过 Utf8JsonReader 解析 json 的示例,让读者掌握原理,在后续章节中,还会介绍如何使用 Utf8JsonReader 实现多语言等基础能力。
-
本章内容比较丰富,首先介绍 Maomi.I18n 框架的使用方法,ASP.NET Core 是怎么识别多语言请求和使用多语言的,了解 i18n 框架需要做什么,然后开始设计抽象、编写实现代码。编写框架完毕后,还需要编写单元测试,笔者介绍了如何编写单元测试。接着介绍了如何基于 Redis 实现多语言,最后介绍如何在 nuget 包中打包多语言文件与他人共享。
-
本章内容详细介绍了 HttpClient 的使用方法,除了基础知识外,还包括比如请求参数、请求凭证、异常处理,接着详细介绍了 IHttpClientFactory ,包括请求拦截、请求策略(重试、超时)等技术。介绍了 Refit 工具的使用方法,如何在业务开发中使用 Refit 快速生成 http 请求代码,简化开发过程。最后介绍如何自己编写一个类似 curl 的工具,掌握使用 .NET 编写命令行工具的技术和技巧。
-
事件总线是 DDD 开发中最常用的解耦通讯手段,所以本章会带着读者从零设计一个事件总线框架,从抽象设计到编写,讲解了每个环节的原理和实现代码。事件总线中会使用到反射、委托、表达式树等技术,如果你对表达式树不了解,没关系,先照着做、按照教程学,不需要死扣技术细节,只需要掌握大体设计和开发思路即可。
-
本章内容比较丰富,讲解了 EMIT 技术和如何开发 AOP 框架,表达式树的两种使用方法、编写对象映射框架、简单的 ORM 框架,介绍 Roslyn 技术、代码生成和编译、Natasha 框架的简单使用,最后介绍了 Source Generators (简称 sg 技术)实现代码生成。
限于篇幅,本章不会过隙讨论各种技术,如果读者需要打好基础,可以参考笔者其它电子书:
反射基础: https://reflect.whuanle.cn/
表达式树基础:https://ex.whuanle.cn
-
本章内容比较丰富,日常开发中大家都会定制 Web 框架,以使用企业内部需求,那么本章介绍了开发中比较常见的东西,以及如何定制它,比如模型验证是怎么实现的、如何自定义模型验证器、模型验证器中使用 i18n,各种筛选器的使用方法和技巧、定制开发筛选器(Action 筛选器、资源筛选器、异常筛选器),Swagger 定制(模型类属性类型转换、接口分组、接口版本号、微服务路由后缀)等。
-
详细介绍了 Maomi.Mapper 的使用方法。
工良出品,从零设计开发 .NET 开发框架:框架源码和教程电子书的更多相关文章
- 工良出品:包教会,Hadoop、Hive 搭建部署简易教程
目录 导读 Hadoop.Hive 是什么 运行环境 Java 环境 Mysql 下载 Hadoop.Hive 和 驱动 安装 Hadoop core-site.xml hdfs-site.xml m ...
- 基于Android开发的天气预报app(源码下载)
原文:基于Android开发的天气预报app(源码下载) 基于AndroidStudio环境开发的天气app -系统总体介绍:本天气app使用AndroidStudio这个IDE工具在Windows1 ...
- H5类似易企秀/编辑器/页面制作/开发/生成工具/软件/源码/授权
代码地址如下:http://www.demodashi.com/demo/14960.html 项目简介 H5DS (HTML5 Design software) 这是一款基于WEB的 H5制作工具. ...
- C# WINFORM进销存系统开发(内涵免费源码+部分实操视频讲解)
互联网的时代,电商火爆,大家都开始进行线上销售货品,那你是如何管理你的商品库存和进销问题?软积木--小敏用的是C# WINFORM进销存系统来管理我的数据,给我带来了很多便利. 它是高频需求项目,很多 ...
- Java学习-039-源码 jar 包的二次开发扩展实例(源码修改)
最近在使用已有的一些 jar 包时,发现有些 jar 包中的一些方法无法满足自己的一些需求,例如返回固定的格式,字符串处理等等,因而需要对原有 jar 文件中对应的 class 文件进行二次开发扩展, ...
- 迅为4412开发板QtE系统源码-屏幕横竖屏切换修改方法
迅为4412开发板QtE系统源码-屏幕横竖屏切换修改方法 详情了解:http://topeetboard.com 更多了解:https://arm-board.taobao.com/ 用户在开发板上运 ...
- Harmony OS 开发避坑指南——源码下载和编译
Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...
- Asp.net MVC4 +EF6开发的个人网站源码和介绍(仅供新手学习)
本项目是我去年利用业余时间开发的,采用的是asp.net mvc 4 +EF6+三层架构,适合新手进行学习,高手就没有什么价值了,可以直接跳过. 源码和数据库下载(已上传到git):https://g ...
- 零基础带你看Spring源码——IOC控制反转
本章开始来学习下Spring的源码,看看Spring框架最核心.最常用的功能是怎么实现的. 网上介绍Spring,说源码的文章,大多数都是生搬硬推,都是直接看来的观点换个描述就放出来.这并不能说有问题 ...
- Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)
一.Django请求生命周期: 前端发出请求到后端,通过Django处理.响应返回给前端相关结果的过程 先进入实现了wsgi协议的web服务器--->进入django中间件--->路由f分 ...
随机推荐
- NC23803 DongDong认亲戚
题目链接 题目 题目描述 DongDong每年过春节都要回到老家探亲,然而DongDong记性并不好,没法想起谁是谁的亲戚(定义:若A和B是亲戚,B和C是亲戚,那么A和C也是亲戚),她只好求助于会编程 ...
- Dubbo本地调试方法
方法一:用版本号来区分 比如,开发环境上跑的服务版本是1.0.0,那么为了在本地打断点调试某个服务,可以在本地启动,将version设置为2.0.0 服务提供者 @DubboService(versi ...
- Zabbix 配置笔记
Zabbix Server 安装参考 https://www.cnblogs.com/clsn/p/7885990.html 安装脚本 #!/bin/bash #clsn #设置解析 注意:网络条件较 ...
- spring boot+bootstrap实现动态轮播图实战
1.bootstrap轮播图 最近开发了个网站需要用到轮播图,正好前端用的是Bootstrap,这里就实战一下. 水平一般能力有限,仅供参考. 前提条件: bootstrap4.5 jquery 3张 ...
- PL/SQL相关的数据字典
PL/SQL相关的数据字典 http://www.oracle.com/technetwork/issue-archive/2012/12-nov/o62plsql-1851968.html 有时候, ...
- Detours 的使用
Detours 是一个用于在 ARM, ARM64, X86, X64 和 IA64 机器上拦截二进制函数的库. Detours 最常用来拦截应用程序中的 win32 api 调用,比如添加调试工具. ...
- CoaXPress 2.0 FPGA 4 Channel Host and Device FMC Card User Manual
Hello-FPGA CoaXPress 2.0 FMC Card User Manual 4 1 CoaXPress 简介 4 2 CoaXPress 4R FMC 5 2.1 硬件特性 5 2.2 ...
- OPPO 自研大规模知识图谱及其在数智工程中的应用
导读:OPPO 知识图谱是 OPPO 数智工程系统小布助手团队主导.多团队协作建设的自研大规模通用知识图谱,目前已达到数亿实体和数十亿三元组的规模,主要落地在小布助手知识问答.电商搜索等场景. 本文主 ...
- 黑马python基础课的一些题
1, 打印5行小星星 思路: 可以用1个星星乘以行数:还可以循环嵌套,外层循环控制行数,内层循环控制每一行应该输出多少个小星星,比如,第一行输出1个,第二行输出2个,内层循环可以当成列,只不过这个列要 ...
- 李宏毅2022机器学习HW4 Speaker Identification上(Dataset &Self-Attention)
Homework4 Dataset介绍及处理 Dataset introduction 训练数据集metadata.json包括speakers和n_mels,前者表示每个speaker所包含的多条语 ...