# daprplus **Repository Path**: itisget/daprplus ## Basic Information - **Project Name**: daprplus - **Description**: DaprPlus 是一个基于 Dapr 的现代化微服务框架,采用简洁洋葱架构(Domain/Application/Infrastructure/Api)的经典分层设计。 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2026-01-22 - **Last Updated**: 2026-01-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DaprPlus [![.NET](https://img.shields.io/badge/.NET-8.0-blue.svg)](https://dotnet.microsoft.com/download/dotnet/8.0) [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg)]() ## 项目简介 DaprPlus 是一个基于 Dapr 的现代化微服务框架,采用简洁洋葱架构(Domain/Application/Infrastructure/Api)的经典分层设计。在当今快速发展的微服务架构领域,开发者往往需要花费大量时间学习和集成各种技术栈,而 DaprPlus 框架的诞生正是为了解决这一痛点。 ### 为什么选择 DaprPlus? 在传统的微服务开发中,开发者需要面对以下挑战: - **技术栈复杂**:需要学习和集成多种技术框架,如 Entity Framework、MediatR、AutoMapper 等 - **架构设计困难**:如何设计清晰的分层架构,如何管理模块依赖关系 - **数据访问复杂**:如何实现 CQRS、如何管理事务、如何优化查询性能 - **服务间通信**:如何实现可靠的服务间通信,如何处理分布式事务 - **安全认证**:如何实现统一的身份认证和授权管理 DaprPlus 框架通过精心设计的模块化架构和丰富的功能组件,为开发者提供了一个开箱即用的微服务开发平台。框架内置了企业级应用所需的各种功能,包括数据访问、事件处理、安全认证、API 管理等,让开发者可以快速构建高质量的微服务应用。 ### 框架设计理念 DaprPlus 遵循以下设计理念: 1. **简洁至上**:提供简洁明了的 API 设计,降低学习成本 2. **模块化设计**:通过模块化架构实现功能的松耦合和高内聚 3. **约定优于配置**:通过合理的默认配置减少开发者的配置工作 4. **可扩展性**:提供丰富的扩展点,支持自定义功能开发 5. **性能优先**:内置性能优化机制,支持高并发场景 6. **企业级特性**:提供日志记录、监控、健康检查等企业级功能 ## 核心特性 ### 🏗️ 架构设计 DaprPlus 采用业界认可的洋葱架构模式,将应用程序分为四个清晰的层次: - **Domain 层(领域层)**:定义业务实体、领域事件、领域服务和业务规则,是整个应用的核心,不依赖任何外部技术 - **Application 层(应用层)**:协调领域对象执行应用程序任务,处理用例和业务流程,通过 MediatR 实现 CQRS 模式 - **Infrastructure 层(基础设施层)**:提供技术实现,如数据持久化、外部服务调用、消息队列等 - **Api 层(接口层)**:提供对外的 API 接口,可以是 REST API、GraphQL 或其他形式的接口 **模块化设计**是 DaprPlus 的核心特色。框架设计了一个树形的模块 Module 系统,各个模块可以从启动模块开始,自上而下形成模块依赖树。这种设计带来的好处包括: - 自动依赖解析:框架会自动分析模块依赖关系,确保正确的加载顺序 - 松耦合架构:模块之间通过接口通信,降低耦合度 - 易于测试:每个模块可以独立测试 - 可插拔设计:可以根据需要启用或禁用特定模块 **依赖注入**系统基于 .NET 原生的 DI 容器,支持三种生命周期:单例(Singleton)、作用域(Scoped)和瞬态(Transient)。框架还提供了自动服务注册功能,可以根据约定自动注册服务,大大减少样板代码。 **配置管理**系统支持多环境配置,包括开发环境、测试环境、生产环境等。配置可以通过 appsettings.json、环境变量、命令行参数等多种方式提供,支持配置热更新和配置验证。 ### 📊 数据访问 DaprPlus 提供了完整的数据访问解决方案,基于 Entity Framework Core 构建,支持多种数据库提供程序。 **Repository 模式** 是数据访问层的核心设计模式。框架提供了两种类型的仓储接口: - `IQueryRepository`:只读仓储,专门用于查询操作,自动切换到从数据库 - `IRepository`:可写仓储,继承自查询仓储,提供增删改功能,自动切换到主数据库 **规约模式(Specification Pattern)** 是框架的重要特性,它允许开发者将复杂的查询逻辑封装成可重用的规约对象。规约模式的优势包括: - 提高代码可读性:将复杂的查询条件封装成有意义的规约名称 - 支持组合查询:可以通过 And、Or、Not 等操作符组合多个规约 - 支持权限控制:可以集成用户权限,只查询用户有权限访问的数据 - 易于测试:规约可以独立测试,提高测试覆盖率 **CQRS(命令查询责任分离)** 支持是框架的另一个重要特性。通过分离命令和查询操作,可以实现: - 读写分离:查询操作使用从数据库,命令操作使用主数据库 - 性能优化:可以为查询和命令使用不同的数据库优化策略 - 扩展性:可以独立扩展查询和命令处理能力 **工作单元(UnitOfWork)** 模式提供了完整的事务管理功能: - 嵌套事务支持:通过事务计数器实现嵌套事务 - 自动事务管理:在事务提交时自动发布领域事件和集成事件 - 异常回滚:发生异常时自动回滚事务 - 性能优化:支持批量操作和批量提交 ### 🔄 事件驱动 DaprPlus 采用事件驱动架构,支持两种类型的事件:领域事件和集成事件。 **领域事件(Domain Events)** 用于服务内部的事件通信。当领域对象的状态发生变化时,会发布相应的领域事件,其他领域对象可以订阅这些事件并做出响应。领域事件的特点包括: - 强一致性:领域事件在同一个事务中发布和处理,保证数据一致性 - 业务语义:事件名称和内容直接反映业务含义 - 解耦设计:发布者和订阅者之间松耦合,易于扩展和维护 - 事务性:事件发布和业务操作在同一个事务中,要么全部成功,要么全部失败 **集成事件(Integration Events)** 通过集成Dapr实现用于服务间的集成事件通信。当需要通知其他微服务时,会发布集成事件。集成事件的特点包括: - 最终一致性:集成事件采用异步处理,保证最终一致性 - 可靠性:通过消息队列保证事件的可靠传递 - 幂等性:支持重复处理,避免重复操作 - 可追溯性:记录事件的发布和处理历史 **MediatR 集成** 为框架提供了强大的中介者模式支持。通过 MediatR,可以实现: - 命令处理:将业务操作封装成命令,由专门的处理器处理 - 查询处理:将数据查询封装成查询对象,由专门的处理器处理 - 行为管道:支持横切关注点,如日志记录、性能监控、异常处理等 - 发布订阅:支持领域事件事件的发布和订阅机制 ### 🛡️ 安全与授权 DaprPlus 提供了完整的安全解决方案,基于 ASP.NET Core Identity 构建,支持多种认证和授权方式。 **身份认证(Authentication)** 系统基于 ASP.NET Core Identity,提供了丰富的用户管理功能: - 用户管理:支持用户注册、登录、密码重置等基本功能 - 多种认证方式:支持用户名密码、外部登录(Google、Facebook、Microsoft 等) - 密码策略:可配置的密码复杂度要求 - 账户锁定:支持账户锁定和自动解锁机制 - 双因素认证:支持短信、邮件、TOTP 等多种双因素认证方式 **授权管理(Authorization)** 采用基于角色的访问控制(RBAC)模型: - 角色管理:支持角色的创建、分配和权限管理 - 权限控制:细粒度的权限控制,支持资源级别的权限管理 - 策略授权:支持自定义授权策略,满足复杂的业务需求 - 声明授权:基于用户声明的授权机制 - 资源授权:支持对特定资源的访问控制 **OpenIddict 集成** 提供了完整的 OAuth 2.0 和 OpenID Connect 支持: - OAuth 2.0 服务器:可以作为 OAuth 2.0 授权服务器 - OpenID Connect:支持 OpenID Connect 协议,提供身份认证服务 - JWT 令牌:支持 JWT 令牌的生成和验证 - 客户端管理:支持 OAuth 客户端的注册和管理 - 作用域管理:支持权限作用域的定义和管理 ### 🌐 Web 开发 DaprPlus 为 Web 应用开发提供了完整的解决方案,基于 ASP.NET Core 构建,支持现代化的 Web 开发模式。 **API 统一封装** 是框架的重要特性,通过 `ApiResultWrapperFilterAttribute` 过滤器自动包装所有 API 返回结果: - 统一响应格式:所有 API 都返回统一的 `ApiResult` 格式,包含状态码、消息和数据 - 自动状态码映射:根据 HTTP 状态码自动设置相应的 API 结果类型 - 异常自动处理:自动捕获和处理异常,返回友好的错误信息 - 支持多种返回类型:支持对象、字符串、状态码等多种返回类型 **异常处理** 机制采用可扩展的设计,支持自定义异常处理器: - 异常处理器链:支持多个异常处理器按优先级处理异常 - 自定义异常处理:可以注册自定义的异常处理器处理特定类型的异常 - 友好错误信息:将技术异常转换为用户友好的错误信息 - 错误日志记录:自动记录异常详情,便于问题排查 **日志记录** 系统提供了完整的日志记录和行为跟踪功能: - 结构化日志:支持结构化日志记录,便于日志分析和查询 - 请求跟踪:自动记录 HTTP 请求的详细信息,包括请求参数、响应时间等 - 性能监控:记录方法执行时间,便于性能分析和优化 - 多级别日志:支持 Debug、Info、Warning、Error 等多个日志级别 - 日志聚合:支持将日志发送到外部日志聚合系统 **国际化** 支持使应用能够支持多种语言: - 多语言资源:支持多种语言的资源文件 - 动态语言切换:支持运行时动态切换语言 - 文化信息处理:正确处理不同文化的日期、数字格式 - 本地化中间件:提供本地化中间件自动处理语言设置 ### 🔧 开发工具 DaprPlus 集成了多种开发工具,提高开发效率和代码质量。 **AutoMapper 集成** 提供了强大的对象映射功能: - 自动映射配置:基于约定的自动映射配置,减少手动配置工作 - 双向映射:支持对象之间的双向映射 - 条件映射:支持基于条件的映射逻辑 - 自定义映射:支持自定义映射规则和转换器 - 性能优化:内置性能优化机制,提高映射效率 **验证框架** 基于 FluentValidation,提供了强大的数据验证功能: - 声明式验证:使用流畅的 API 定义验证规则 - 异步验证:支持异步验证操作 - 自定义验证器:支持自定义验证器和验证规则 - 本地化支持:验证错误信息支持多语言 - 集成验证:与 ASP.NET Core 模型验证完美集成 **缓存支持** 提供了完整的分布式缓存解决方案: - 多种缓存提供程序:支持 Redis、内存缓存等多种缓存提供程序 - 缓存策略:支持多种缓存策略,如绝对过期、滑动过期等 - 缓存标签:支持缓存标签,便于批量管理缓存 - 缓存预热:支持缓存预热功能,提高应用启动性能 - 缓存监控:提供缓存命中率、性能等监控指标 **健康检查** 系统提供了完整的服务健康状态监控: - 多种健康检查:支持数据库、缓存、外部服务等多种健康检查 - 自定义健康检查:支持自定义健康检查逻辑 - 健康检查聚合:支持多个健康检查结果的聚合 - 健康检查报告:提供详细的健康检查报告 - 监控集成:与监控系统集成,支持告警和通知 ## 项目结构 DaprPlus 项目采用清晰的分层结构,将框架核心代码和示例应用分离,便于理解和维护。 ``` daprplus/ ├── src/ # 框架核心源码 │ ├── DaprPlus/ # 核心框架 │ │ ├── AspNetCore/ # ASP.NET Core 集成 │ │ ├── Builder/ # 模块构建器 │ │ ├── Domain/ # 领域模型 │ │ ├── MediatR/ # MediatR 集成 │ │ ├── Specifications/ # 规约模式 │ │ └── ... # 其他核心组件 │ ├── DaprPlus.Authorization/ # 授权模块 │ │ ├── Application/ # 授权应用服务 │ │ ├── Domain/ # 授权领域模型 │ │ └── AspNetCore/ # ASP.NET Core 集成 │ ├── DaprPlus.AutoMapper/ # 对象映射模块 │ ├── DaprPlus.Dapr/ # Dapr 集成模块 │ │ ├── Events/ # 事件处理 │ │ └── States/ # 状态管理 │ ├── DaprPlus.EntityFrameworkCore/ # 数据访问模块 │ │ ├── Repository.cs # 仓储实现 │ │ ├── UnitOfWork.cs # 工作单元 │ │ └── ... # 其他数据访问组件 │ └── DaprPlus.Identity/ # 身份认证模块 │ ├── Application/ # 身份认证应用服务 │ ├── Domain/ # 身份认证领域模型 │ └── Options/ # 配置选项 ├── server/ # 示例服务 │ ├── Identity.Api/ # 身份认证 API 服务 │ │ ├── Controllers/ # API 控制器 │ │ ├── Views/ # MVC 视图 │ │ ├── Models/ # 视图模型 │ │ └── Migrations/ # 数据库迁移 │ ├── Identity.Application/ # 身份认证应用层 │ │ ├── Identity/ # 身份认证服务 │ │ └── Commands/ # 命令处理 │ ├── Identity.Domain/ # 身份认证领域层 │ │ ├── Entities/ # 领域实体 │ │ └── IntegrationEvents/ # 集成事件 │ ├── Identity.Infrastructure/ # 身份认证基础设施层 │ │ ├── EntityFrameworkCore/ # 数据访问实现 │ │ ├── Authorization/ # 授权实现 │ │ └── AutoMapper/ # 对象映射配置 │ ├── Todos.Api/ # 待办事项 API 服务 │ ├── Todos.Application/ # 待办事项应用层 │ ├── Todos.Domain/ # 待办事项领域层 │ ├── Todos.Infrastructure/ # 待办事项基础设施层 │ ├── ApiGateway/ # API 网关 │ │ ├── Controllers/ # 网关控制器 │ │ └── Startups/ # 启动配置 │ ├── AppHost/ # 应用宿主 │ │ ├── Program.cs # 程序入口 │ │ └── appsettings.json # 配置文件 │ └── Shares.Infrastructure/ # 共享基础设施 │ ├── AspNetCore/ # ASP.NET Core 扩展 │ ├── Redis/ # Redis 集成 │ └── Security/ # 安全组件 └── docs/ # 文档 ├── README.md # 项目说明 └── ... # 其他文档 ``` ### 目录结构说明 **src/ 目录**包含框架的核心源码,每个子目录都是一个独立的 NuGet 包: - **DaprPlus**:框架的核心包,包含模块系统、依赖注入、配置管理等基础功能 - **DaprPlus.Authorization**:授权模块,提供基于角色的访问控制功能 - **DaprPlus.AutoMapper**:对象映射模块,基于 AutoMapper 提供对象映射功能 - **DaprPlus.Dapr**:Dapr 集成模块,提供与 Dapr 运行时的集成功能 - **DaprPlus.EntityFrameworkCore**:数据访问模块,基于 Entity Framework Core 提供数据访问功能 - **DaprPlus.Identity**:身份认证模块,基于 ASP.NET Core Identity 提供身份认证功能 **server/ 目录**包含示例应用,展示了如何使用 DaprPlus 框架构建微服务应用: - **Identity.Api**:身份认证 API 服务,提供用户管理、角色管理、权限管理等功能 - **Identity.Application**:身份认证应用层,包含业务逻辑和用例实现 - **Identity.Domain**:身份认证领域层,包含领域实体、领域事件等 - **Identity.Infrastructure**:身份认证基础设施层,包含数据访问、外部服务集成等 - **Todos.Api**:待办事项 API 服务,展示简单的 CRUD 操作 - **ApiGateway**:API 网关,提供统一的 API 入口 - **AppHost**:应用宿主,用于启动和配置整个应用系统 ## 贡献指南 我们欢迎社区贡献!请遵循以下步骤: 1. Fork 项目 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 打开 Pull Request ## 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 ## 联系方式 - 项目主页:https://dapr.plus - 问题反馈:https://github.com/your-org/daprplus/issues - 邮箱:support@dapr.plus ## 致谢 感谢所有为 DaprPlus 项目做出贡献的开发者和社区成员! --- **DaprPlus** - 让微服务开发更简单、更高效!