# Evently **Repository Path**: ymjake/Evently ## Basic Information - **Project Name**: Evently - **Description**: This is a learning project focused on understanding modular monolith architecture and DDD practices - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-22 - **Last Updated**: 2025-10-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README - # Evently - 模块化单体学习项目 基于 Milan Jovanovic 课程的模块化单体架构实践项目,使用现代 .NET 技术栈构建活动票务平台。 ## 🎯 项目目标 - 深度理解模块化单体架构模式 - 掌握 DDD + CQRS + Event Sourcing 实践 - 学习企业级 .NET 应用开发最佳实践 - 掌握模块间通信和数据一致性处理 ## 🏗️ 技术栈 ### 核心框架 - **.NET 8** - 应用框架 - **ASP.NET Core** - Web API - **Entity Framework Core** - ORM - **MediatR** - CQRS 实现 ### 数据存储 - **PostgreSQL** - 主数据库 - **Redis** - 分布式缓存 ### 消息通信 - **MassTransit** - 消息总线 - **In-Memory** - 模块间事件通信 ### 身份认证 - **Keycloak** - 身份提供商 - **JWT Bearer** - API 认证 ### 可观察性 - **Serilog** - 结构化日志 - **Seq** - 日志聚合和查询 - **OpenTelemetry** - 分布式追踪 ### 测试 - **xUnit** - 单元测试框架 - **FluentAssertions** - 断言库 - **Testcontainers** - 集成测试 - **NetArchTest** - 架构测试 - **Bogus** - 测试数据生成 ### 开发工具 - **Docker** - 容器化 - **Docker Compose** - 本地开发环境 - **FluentValidation** - 输入验证 - **Quartz.NET** - 后台任务调度 ## 🏛️ 架构设计 ### 模块划分 ``` src/ ├── API/ # API 网关层 ├── Common/ # 共享基础设施 │ ├── Domain/ # 领域基础类 │ ├── Application/ # 应用层抽象 │ ├── Infrastructure/ # 基础设施实现 │ └── Presentation/ # 表示层抽象 └── Modules/ # 业务模块 ├── Users/ # 用户管理 ├── Events/ # 活动管理 ├── Ticketing/ # 票务销售 └── Attendance/ # 参会管理 ``` ### 每个模块的分层结构 ``` Module/ ├── Domain/ # 领域层 │ ├── Entities/ # 实体和聚合根 │ ├── ValueObjects/ # 值对象 │ ├── DomainEvents/ # 领域事件 │ └── Repositories/ # 仓储接口 ├── Application/ # 应用层 │ ├── Commands/ # 命令处理 │ ├── Queries/ # 查询处理 │ ├── EventHandlers/ # 事件处理器 │ └── Validators/ # 验证器 ├── Infrastructure/ # 基础设施层 │ ├── Database/ # 数据访问 │ ├── Repositories/ # 仓储实现 │ ├── EventHandlers/ # 集成事件处理 │ └── Configuration/ # 模块配置 ├── Presentation/ # 表示层 │ ├── Endpoints/ # API 端点 │ └── Controllers/ # 控制器 ├── IntegrationEvents/ # 集成事件定义 └── PublicApi/ # 模块公共接口 ``` ## 🔄 核心模式 ### 1. Domain-Driven Design (DDD) - **聚合根**:封装业务规则和不变性 - **值对象**:不可变的领域概念 - **领域事件**:业务状态变化的通知 - **仓储模式**:数据访问抽象 ### 2. CQRS (Command Query Responsibility Segregation) - **命令**:修改系统状态的操作 - **查询**:读取数据的操作 - **处理器**:命令和查询的处理逻辑 - **管道行为**:横切关注点处理 ### 3. Event-Driven Architecture - **领域事件**:模块内部事件 - **集成事件**:模块间通信事件 - **事件总线**:事件分发机制 - **最终一致性**:跨模块数据同步 ### 4. Outbox/Inbox Pattern - **Outbox**:确保事件发布的可靠性 - **Inbox**:处理重复消息的幂等性 - **事务一致性**:数据库操作和事件发布的原子性 ## 📋 学习计划 ### Phase 1: 基础设施搭建 (Week 1) - [ ] 项目结构创建 - [ ] Common 层实现 - [ ] 数据库配置 - [ ] 日志和监控配置 - [ ] Docker 环境搭建 ### Phase 2: 核心模块实现 (Week 2-3) - [ ] Users 模块 - 用户管理 - [ ] Events 模块 - 活动管理 - [ ] 模块间通信机制 - [ ] 身份认证集成 ### Phase 3: 业务模块完善 (Week 4-5) - [ ] Ticketing 模块 - 票务系统 - [ ] Attendance 模块 - 参会管理 - [ ] 支付集成 - [ ] 业务流程完整性 ### Phase 4: 高级特性 (Week 6) - [ ] 性能优化 - [ ] 缓存策略 - [ ] 监控和日志 - [ ] 压力测试 ## 🚀 快速开始 ### 环境要求 - .NET 8 SDK - Docker Desktop - PostgreSQL 15+ - Redis 7+ ### 本地开发环境 ```bash # 启动基础设施 docker-compose up -d postgres redis keycloak seq # 运行应用 dotnet run --project src/API/Evently.Api # 运行测试 dotnet test ``` ### 开发工具配置 ```bash # 安装 EF Core 工具 dotnet tool install --global dotnet-ef # 数据库迁移 dotnet ef database update --project src/Modules/Users/Evently.Modules.Users.Infrastructure # 代码生成 dotnet new sln -n Evently dotnet sln add src/**/*.csproj ``` ## 📊 监控面板 - **应用日志**: http://localhost:5341 (Seq) - **身份管理**: http://localhost:8080 (Keycloak) ## 🧪 测试策略 ### 测试金字塔 ``` E2E Tests (少量) ├── 关键业务流程测试 └── 用户体验验证 Integration Tests (适量) ├── 模块间集成测试 ├── 数据库集成测试 └── 外部服务集成测试 Unit Tests (大量) ├── 领域逻辑测试 ├── 应用服务测试 └── 基础设施测试 Architecture Tests ├── 模块边界验证 ├── 依赖关系检查 └── 命名约定验证 ``` ## 📚 学习资源 ### 推荐阅读 - **《实现领域驱动设计》** - Vaughn Vernon - **《领域驱动设计》** - Eric Evans - **《.NET 应用架构指南》** - Microsoft ### 在线资源 - [Milan Jovanovic Blog](https://www.milanjovanovic.tech/) - [.NET Application Architecture Guides](https://dotnet.microsoft.com/learn/dotnet/architecture-guides) - [Clean Architecture Template](https://github.com/jasontaylordev/CleanArchitecture) ## 🎯 学习目标检查清单 ### 架构理解 - [ ] 理解模块化单体架构模式 - [ ] 掌握 DDD 战术和战略设计 - [ ] 熟练使用 CQRS 模式 - [ ] 理解事件驱动架构 ### 技术实践 - [ ] 熟练使用 EF Core 和数据库设计 - [ ] 掌握 MediatR 和管道模式 - [ ] 理解模块间数据一致性处理 - [ ] 熟悉容器化和开发环境搭建 ### 工程能力 - [ ] 编写高质量的测试 - [ ] 实施有效的监控和日志 - [ ] 处理错误和异常情况 - [ ] 优化性能和可扩展性 --- **注意**: 这是一个学习项目,重点在于理解模块化单体架构模式和 DDD 实践,而不是生产就绪的系统。通过手写这个项目,深入掌握企业级 .NET 应用的架构设计和最佳实践。