重新发明轮子:创建您自己的MediatR - 第2部分

重新发明轮子:创建您自己的MediatR - 第2部分

💡 原文约2900字/词,阅读约需11分钟。
📝

内容提要

本文介绍了如何重构Mediator库,强调代码的组织性和可测试性。作者几乎重写了所有代码,并详细阐述了项目结构、依赖注入、过滤器和处理程序的实现。接下来将添加通知系统,并展示该库的使用方法。

🎯

关键要点

  • 本文介绍了如何重构Mediator库,强调代码的组织性和可测试性。

  • 作者几乎重写了所有代码,并详细阐述了项目结构、依赖注入、过滤器和处理程序的实现。

  • 项目结构包括DependencyInjection、Executors、Inspectors、Models和Registries等文件夹。

  • DependencyInjection/DependencyInjection.cs配置了依赖注入,支持注册Handlers和Filters。

  • Executors/FilterExecutor.cs和Executors/HandlerExecutor.cs分别执行过滤器和处理程序。

  • Inspectors/ServiceInspector.cs用于检查类型并创建服务描述符。

  • Models/ServiceCategory.cs和Models/ServiceDescriptor.cs用于组织和描述服务。

  • Registries/FilterRegistry.cs和Registries/HandlerRegistry.cs管理系统中的过滤器和处理程序。

  • IRequestFilter和IRequestHandler接口定义了请求过滤器和处理程序的行为。

  • FilterExecutor确保过滤器按顺序执行,使用堆栈结构来管理执行顺序。

  • 实现了一个简单的通知系统,未来将添加通知功能。

  • 示例代码展示了如何使用Mediator库,包括创建过滤器和处理程序。

  • 最终目标是实现一个完整的Mediator库,具备所有功能。

🔎

延伸解读

项目结构的重要性

本文详细介绍了Mediator库的项目结构,包括依赖注入、执行器、检查器、模型和注册表等模块。这种清晰的结构不仅提高了代码的可读性,还增强了可维护性和可测试性。开发者在构建复杂系统时,应重视项目结构的设计,以便于后续的扩展和修改。

依赖注入的优势

通过DependencyInjection类,本文展示了如何配置依赖注入。这种方式使得不同组件之间的耦合度降低,便于单元测试和模块化开发。开发者在使用依赖注入时,应注意注册的顺序和类型,以确保系统的正常运行和性能优化。

过滤器的执行顺序

FilterExecutor类使用堆栈结构来管理过滤器的执行顺序,确保最后注册的过滤器最先执行。这种设计对于处理请求的顺序逻辑至关重要,开发者在实现过滤器时需考虑其执行顺序对请求处理的影响,以避免潜在的逻辑错误。

延伸问答

如何重构Mediator库以提高代码的组织性和可测试性?

通过重写几乎所有代码,重新组织项目结构,并实现依赖注入、过滤器和处理程序的功能来提高代码的组织性和可测试性。

Mediator库的项目结构包含哪些主要文件夹?

项目结构包括DependencyInjection、Executors、Inspectors、Models和Registries等文件夹。

如何在Mediator库中配置依赖注入?

在DependencyInjection/DependencyInjection.cs中,通过AddTheMediator方法配置依赖注入,注册Handlers和Filters。

FilterExecutor的作用是什么?

FilterExecutor用于执行注册的过滤器,以处理请求在被处理之前或之后的逻辑。

如何在Mediator库中添加过滤器和处理程序?

可以通过AddServicesFromAssemblies方法自动注册,或手动通过Handlers.Add<THandler>和Filters.Add<TFilter>方法注册。

IRequestFilter和IRequestHandler接口的主要区别是什么?

IRequestFilter接口包含一个Func<Task> next参数,用于控制过滤器链的执行,而IRequestHandler接口则用于处理请求的逻辑。

🏷️

标签

➡️

继续阅读