当前位置:首页 > 数码 > 15-C-个顶级开源项目-中值得收藏的

15-C-个顶级开源项目-中值得收藏的

admin7个月前 (04-15)数码75

简介

MediatR 是 .NET 平台上一个轻量级库,它简化了命令查询责任分离 (CQRS) 模式的实现。CQRS 是一个设计模式,它将应用程序中的命令和查询分离成不同的组件。这可以提高应用程序的可维护性、可扩展性和性能。

MediatR 的工作原理

MediatR 通过以下方式实现 CQRS:

  1. 开发者定义请求对象,表示需要执行的命令或查询。
  2. 开发者定义处理器类来处理请求。
  3. MediatR 中介负责协调请求和处理器的通信。

通过这种方式,MediatR 充当了请求和处理器之间的管道,解耦了应用程序的不同组件,从而提高了可维护性和可扩展性。

定义请求

请求对象表示需要执行的命令或查询。例如,一个获取用户名的查询请求可以表示为:

public class GetUserNameQuery : IRequest<string> { public int UserId { get; set; } }

这个请求对象具有一个名为 UserId 的属性,用于标识要获取其用户名的用户。

定义处理器

处理器类负责处理请求。例如,获取用户名的查询处理器可以表示为:

public class GetUserNameQueryHandler : IRequestHandler<GetUserNameQuery, string> { private readonly IUserRepository _userRepository; public GetUserNameQueryHandler(IUserRepository userRepository) { _userRepository = userRepository; } public async Task<string> Handle(GetUserNameQuery request, CancellationToken cancellationToken) { return await _userRepository.GetUserName(request.UserId); } }

这个处理器类实现了 IRequestHandler<GetUserNameQuery, string> 接口,其中 GetUserNameQuery 是要处理的请求类型,而 string 是处理器的返回值类型。

使用 MediatR

要使用 MediatR,您需要在项目中安装 MediatR NuGet 包。您可以使用以下步骤使用 MediatR:

  1. 创建 MediatR 中介对象:
  2. IMediator mediator = new Mediator();
  3. 发送请求并接收响应:
  4. string userName = await mediator.Send(new GetUserNameQuery { UserId = 1 });

在上面的示例中, mediator 对象用于发送 GetUserNameQuery 请求,并接收返回的用户名的字符串。

优点

使用 MediatR 实现 CQRS 模式有很多优点,包括:
  • 可维护性: CQRS 将命令和查询分离成不同的组件,从而提高了应用程序的可维护性。
  • 可扩展性: MediatR 提供了一个管道,允许您在需要时轻松添加新命令或查询。
  • 性能: CQRS 可以提高应用程序的性能,因为它可以并行处理命令和查询。
  • 可测试性: MediatR 简化了应用程序组件的测试,因为您可以独立测试请求和处理器。

结论

MediatR 是一个强大的库,可以轻松地在 .NET 应用程序中实现 CQRS 模式。通过使用 MediatR,您可以提高应用程序的可维护性、可扩展性、性能和可测试性。


程序员的开源月刊《HelloGitHub》第 68 期

HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。

这里有实战项目、入门教程、黑 科技 、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、Java、Go、C/C++、Swift...让你在短时间内感受到开源的魅力,对编程产生兴趣!

1、 toybox:该项目将 200 多个常用的 Linux 命令行工具,做成一个可执行文件。从而可以让 Android 这种原本不支持 Linux 命令的系统,也得以用上 ls、find、ps 等命令。还可以用于快速构建最小的 Linux 环境

2、 the_silver_searcher:比 ack 更快的命令行搜索工具。速度快、功能强大、使用简单,支持 Linux、Windows、macOS 操作系统,还能够整合进 Vim 和 Emacs 等编辑器

3、 WindTerm:支持 SSH/Telnet/Serial/Shell/Sftp 的终端工具。虽然该软件完全免费,但部分代码尚未完全开源,对安全敏感的同学可以再观望下

4、 wavefunctioncollapse:基于波函数坍缩 (WFC) 算法,实现的无限城市示例。城市里有房子、楼梯、树木、连接房屋的通道,你可以在城市中自由移动、跳跃、飞行,但不论你怎么移动都找不到尽头,因为这座城市会无限延伸

5、 NETworkManager:管理和解决网络问题的工具。它集成了 IP 和端口扫描、WiFi 分析器、跟踪路由、DNS 查询等工具

6、 ppsspp:能够运行在 Android 和 PC 上的开源 PSP 模拟器

7、 leocad:用来创建虚拟乐高模型的 CAD 工具。适用于 Windows、Linux 和 macOS 系统

8、 csshake:用 CSS 实现抖动效果

9、 MangoDB:真正开源的 MongoDB 替代品。它底层采用 PostgreSQL 作为存储引擎,用 Go 语言实现了 MongoDB 协议,所以几乎兼容所有的 MongoDB 库,迁移起来毫无负担。如果你用不到 MongoDB 的高级功能,还受限于它的开源协议,那么这个项目可作为 MongoDB 的开源替代方案。它才刚刚起步,建议观望一段时间或做足测试再用于生产环境

10、 caddy:用 Go 编写的轻量级 Web 服务器。它相较于 Apache、Nginx 这些知名 Web 服务器,独特点在于提供了编译好的可执行文件,实现了真正的开箱即用。无需任何配置即可拥有免费的 HTTPS、自动把 Markdown 文件转化成 HTML 等人性化的功能。如果是搭建中小型的 Web 服务,它完全够用而且省时省心

11、 croc:可以让任意两台计算机,安全方便地传输文件和文件夹的工具。轻松实现端到端加密的跨平台文件传输,还支持多文件传输、传输中断和恢复等功能

12、 jnativehook:获取键盘和鼠标事件的 Java 库。轻松监听按键、鼠标移动、点击等事件

13、 spider-flow:用流程图的方式编写爬虫的平台。无需写代码就可以快速完成一个简单的爬虫

14、 greenDAO:高性能的 Android ORM 库。拥有体积小、易于使用、支持数据库加密等特点,通过它 Android 开发者可以采用面向对象的方式操作数据库,不需要再手写和拼接 SQL 啦

15、 vue-color-avatar:纯前端实现的矢量风格头像生成网站。可以通过搭配不同的素材,生成个性化头像。该项目使用 Vite + Vue3 开发,能够帮助前端初学者熟悉 Vue3 语法并掌握项目搭建的相关知识

16、 colorfu:自动生成由文字/颜色/图片/纹理元素组成的壁纸

17、 pm2 的进程管理工具。它容易上手操作简单,可以有效地提高 程序运行的稳定性,支持自动重启、负载均衡、不停服务重启、性能监控等功能,多用于生产环境中管理、监控 进程

18、 automa:通过图形化界面拖拽功能模块,实现浏览器自动操作的扩展工具。轻松实现自动填表、截图、定时执行等操作。让浏览器自动完成预设工作流的插件,从而减少重复性操作提高效率

19、 PyWebIO:快速构建 Web 应用的 Python 工具。通过该项目你可在不写 HTML、CSS、JS 代码的前提下,仅用 Python 快速完成一个包含数据展示、表单的小型 Web 应用页面

20、 pottery:以 Python 的方式操作 Redis 的库。忘记那些 Redis 命令吧,只要你知道如何使用 Python 字典,那么你就会用这个库操作 Redis

21、 zulip:完全开源的企业级即时通讯项目。后端采用 Python 语言实现性能足够强大,功能齐全相当于开源、免费的 Slack,拥有拖拽上传文件、代码高亮、Markdown 语法、应用整合、容易接入的 API 等功能,还支持 Web、PC、iOS 和 Android 主流平台,众多知名企业都在用,能够有效地提高团队沟通和办公效率。同时该项目对新手用户友好,如果你想加入一个不错的 Python 开源项目,推荐你花时间研究下它一定会有所收获

22、 webssh:简单的 SSH 连接服务器的 Python Web 应用。该项目后端采用 Tornado Web 框架和 Python SSH 库 paramiko,前端是 TypeScript 写的命令行前端组件 实现。整个项目简单还具有实用价值,可作为 Python Web 的实战项目学习

23、 django-debug-toolbar:Django 的调试工具栏。可显示当前请求和响应有关的各种调试信息,包括耗时、SQL、配置、性能等信息

24、 hyperfine:命令行基准测试工具。可用来查看和对比命令的耗时,支持多次运行的统计分析、结果导出等功能

25、 xcode-dev-cleaner:用于清理各种 Xcode 的缓存数据,释放存储空间。注意是清除 Xcode 缓存数据,不是卸载 Xcode 哈

中值得收藏的

26、 toml:更易读和易于维护的配置文件格式。如果你厌倦了 INI 的局限性、层层嵌套的 JSON 和 YAML 令人心惊胆战的缩进语法,不防给 TOML 一个机会,它支持多种数据类型、抛弃了缩进和嵌套,而且众多流行编程语言都有对应的库。TOML 已经足够成熟,绝对值得一试

27、 waka-readme-stats:自动在 GitHub 个人首页展示编程时长的工具。该项目通过 WakaTime 记录用户在 IDE 的使用时间,统计编程时长和数据,然后采用 GitHub Action 自动获取并动态更新到 GitHub 个人首页。轻而易举地展示自己的编程时长

28、 PathPlanning:常见的路径规划算法集合。项目包含了 Python 代码实现、运行过程动画以及相关论文

29、 howdy:为 Linux 系统提供人脸识别解锁电脑的工具。通过电脑内置的摄像头和红外设备,实现了类似 Windows Hello风格的身份认证,可用于登陆、锁屏、sudo 等任何需要输入密码的地方

30、 The-Open-Book:开源的电子水墨屏阅读设备。动手能力强的同学可跟着这个项目,从焊电路板开始亲手制作出一个类 Kindle 的 4.2 英寸阅读设备

31、 fl_chart:Flutter 图表库。它支持折线图、条形图、饼图、散点图和雷达图

32、 ugo-compiler-book:《从头开发一个迷你 Go 语言》该书教你从头实现迷你 Go 语言,内容包含了词法解析、语法树构建、函数闭包、接口、CGO 的实现等内容

33、 archbase:教科书《计算机体系结构基础》第三版

34、 spring-in-action-v6-translate:《Spring 实战第 6 版》中文翻译

35、 best_AI_papers_2021:2021 年必看的人工智能论文列表。该项目不是简单的罗列论文,它不仅包含相关论文的代码、效果展示,还有深入的文章和讲解视频。通过学习这些前沿的人工智能论文,提前了解 AI 在未来更多可能性

36、 AnimeGANv2:可以将图片和视频转换成漫画风格的工具。采用的是神经风格迁移+生成对抗网络(GAN)的组合,转换速度快

感谢您的阅读,如果觉得内容还不错的话 求赞、求分享 ,您的每一次支持都将让 HelloGitHub 变得更好!

C语言初学者,必须要了解的六个开源项目

C语言初学者,必须要了解的六个开源项目

项目一名称:C

项目简介:是的,你没有看错,这个项目的名字就是单个字母C。C是一个宝藏项目,可以说是学习数据结构和刷算法题的利器,因为里面包含了几平各种基础算法、数据结构、以及LeetCode算法题的C语言实现。

项目二名称:libhv

项目简介:libhv类似干libevent、libev和libuv,是一个跨平台的具有非阻塞I/O和计时器的异步事件驱动库,但libhv提供7更加简单易用的API接口并支持更加丰富的网络协议,基干它可以快速驱动HTTP服务端和客户端,从而提供高性能的http服务。

主要枝术点或特性:跨平台、事件循环、非阻塞I/O、支持IPv6、使用OpenSSL、支持多种网络协议,对干我们的作用:可以帮助我们理解和实践操作系统的相关知识。

项目三名称:CPlusPlusThings

项目简介:CPlusPlusThings是-个适合初学者的从入门到进阶的仓库,里面包含了大量C++语言的基础和进阶教程、源码剖析、工具推荐、实战练习等等,解决了初学者从入门到深入C++的学习问题。

项目四名称:design-patterns-cpp

项目简介:从项目名称就能够猜出来,这是一个C++语言版的设计模式实现,里面包含了常见设计模式的C++语言实现。

项目五名称:tmux

项目简介:tmuX一个开源免费的的终端复用软件。它的命令行界面非常炫酷易用,支持自由分割窗口,并且可以自由移动和调整,灵活且强大。一个非常强大的使用场景是:当远程连接到服务器使用时,只需要启动tmuX,利用它就可以方便地进行后续操作,而无需打开多个ssh控制台窗口。

项目六名称:netdata

项目简介:netdata是一款开源免费的炫酷Linux系统实时性能和运行状况的系统监控工具。netdata通过使用可交互的仪表盘形式,来提供灵活易用的系统监控。除了支持常见系统平台的安装之外,它还可以非常方便地安装干D0cker容器和集群之中并提供监控服务。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: C#

“15-C-个顶级开源项目-中值得收藏的” 的相关文章

Task.Run-异步编程的比较-C-async-与 (task.run方法)

Task.Run-异步编程的比较-C-async-与 (task.run方法)

概述: C#中的异步编程有两重要形式:Task.Run用于在后盾线程口头同步操作,而async-awt更适用于明晰表白异步流程。基础用法展现了它们的便捷运行,初级用规律展示了它们的联合...

及其初级控件摸索之旅-深化了解跨平台开发畛域的弱小工具-C (及其初级控件有哪些)

及其初级控件摸索之旅-深化了解跨平台开发畛域的弱小工具-C (及其初级控件有哪些)

前几天一个学员在学习C#与初级控件交互时,也不知道初级控件可以用来做什么。 上方咱们就具体讲讲C#和初级控件交互的关系常识。 C#是一种配置丰盛的面向对象编程言语,它蕴含了许多初级控件...

摸索C中的隐秘方法调用-解锁外部或私有方法的秘密通道-深化探寻五种有目共睹的方法

摸索C中的隐秘方法调用-解锁外部或私有方法的秘密通道-深化探寻五种有目共睹的方法

在C#中,可以经常使用不同的方法调用外部或私有方法。上方区分引见经过反射、MethodInfo.CreateDelegate、表白式(树)、灵活方法(call)、灵活方法(calli)这五种方法。...

C-线程本地存储-深化了解线程间值差别 (c++线程 window)

C-线程本地存储-深化了解线程间值差别 (c++线程 window)

为什么用ThreadStatic标志的字段,只要第一个线程拿到了初始值,其余线程都是自动值,让我能不能帮他解答一下,尼玛,我也不是神仙什么都懂,既然问了,那我试着帮他解答一下,也给前面相似不懂的好友解...

算法到-Python-客户端程序的综合指南-C-无缝集成 (算法到底应该怎么学?)

算法到-Python-客户端程序的综合指南-C-无缝集成 (算法到底应该怎么学?)

This example shows how to embed and execute an IronPython script in a C application. using IronP...

C#开发三个关键的内存区域-非托管堆内存和栈内存-托管堆内存 (c#开发实战)

C#开发三个关键的内存区域-非托管堆内存和栈内存-托管堆内存 (c#开发实战)

对内存的治理和操作大部分都是由运转时处置的。开发者无需过多关注内存治理的细节,由于托管堆内存的渣滓回收机制可以智能处置对象的调配和监禁。但是,在特定状况下,如与非托管代码交互、启动性能优化或处置少量数...

深入探索C中的LINQ魔法-功能概述和源代码剖析-b-b (进行深入探索)

深入探索C中的LINQ魔法-功能概述和源代码剖析-b-b (进行深入探索)

简介 LINQ(语言集成查询)是一种用于 C 中的数据查询和操作的强大工具。它允许开发人员使用类 C 语法而不是 SQL 语句来查询和操作各种数据源,例如集合、数组和 XML 文档。 20...

C-值传递与引用传递详解-中的参数传递 (c 值传递)

C-值传递与引用传递详解-中的参数传递 (c 值传递)

简介 C 是一种面向对象的编程语言,支持多种参数传递方式,包括传值和传引用两种方式。在本文中,我们将讨论 C 中的参数传递方式以及如何使用它们来实现不同的交互模式。 参数传递方式...