命运大师 API - 重构后的架构
本项目采用 Clean Architecture(整洁架构) 模式重构,提供清晰的分层结构,易于维护和扩展。
项目结构
FateMaster.API/
├── FateMaster.Domain/ # 领域层(实体、枚举、领域接口)
│ ├── Entities/ # 实体类
│ │ ├── DivinationRecord.cs
│ │ ├── PriceConfig.cs
│ │ └── SystemConfig.cs
│ ├── Enums/ # 枚举
│ │ ├── DivinationType.cs
│ │ ├── PaymentStatus.cs
│ │ └── PaymentMethod.cs
│ ├── Common/ # 公共基类
│ │ └── BaseEntity.cs
│ └── Interfaces/ # 领域接口
│ ├── IRepository.cs
│ └── IUnitOfWork.cs
│
├── FateMaster.Shared/ # 共享层(DTOs、常量、工具类)
│ ├── DTOs/
│ │ ├── DivinationDTOs.cs # 卜卦相关DTOs
│ │ ├── PriceConfigDTOs.cs # 价格配置DTOs
│ │ ├── AdminDTOs.cs # 管理后台DTOs
│ │ └── ApiResponse.cs # 统一响应包装
│ └── Constants/
│ └── AppConstants.cs # 应用常量
│
├── FateMaster.Application/ # 应用服务层(业务逻辑)
│ ├── Interfaces/
│ │ ├── IDivinationService.cs
│ │ ├── IPriceConfigService.cs
│ │ └── IAdminService.cs
│ ├── Services/
│ │ ├── DivinationService.cs
│ │ ├── PriceConfigService.cs
│ │ └── AdminService.cs
│ └── DependencyInjection.cs # 服务注册
│
├── FateMaster.Infrastructure/ # 基础设施层(数据访问)
│ ├── Data/
│ │ └── ApplicationDbContext.cs
│ ├── Repositories/
│ │ ├── Repository.cs # 通用仓储实现
│ │ └── UnitOfWork.cs # 工作单元实现
│ └── DependencyInjection.cs # 基础设施服务注册
│
├── FateMaster.Web.API/ # 网站前端API
│ ├── Controllers/
│ │ └── DivinationController.cs
│ ├── Program.cs
│ └── appsettings.json
│
└── FateMaster.Admin.API/ # 管理后台API
├── Controllers/
│ ├── PricesController.cs
│ └── RecordsController.cs
├── Program.cs
└── appsettings.json
架构层次
1. Domain(领域层)
- 职责:定义核心实体、枚举和领域接口
- 依赖:无依赖(最内层)
- 特点:独立于外部框架和技术
2. Shared(共享层)
- 职责:提供跨层共享的DTOs、常量和工具类
- 依赖:无依赖
- 特点:可被所有层引用
3. Application(应用服务层)
- 职责:实现业务逻辑和用例
- 依赖:Domain、Shared
- 特点:定义服务接口和实现
4. Infrastructure(基础设施层)
- 职责:实现数据访问和外部服务集成
- 依赖:Domain、Application、Shared
- 特点:实现Repository模式和UnitOfWork模式
5. Web.API(网站前端API)
- 职责:为网站前端提供HTTP API
- 端口:默认 5000 (HTTP), 5001 (HTTPS)
- 依赖:Application、Infrastructure、Shared
- CORS:允许
http://localhost:3000,http://localhost:3001
6. Admin.API(管理后台API)
- 职责:为管理后台提供HTTP API
- 端口:默认 5002 (HTTP), 5003 (HTTPS)
- 依赖:Application、Infrastructure、Shared
- CORS:允许
http://localhost:3002,http://localhost:3003
运行项目
前置条件
- .NET 8.0 SDK
- MySQL 8.0+
配置数据库
修改 appsettings.json 中的连接字符串:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Port=3306;Database=fatemaster;User=root;Password=your_password;"
}
}
运行迁移(首次运行)
# 在 FateMaster.API 目录下执行
dotnet ef migrations add InitialCreate --project FateMaster.Infrastructure --startup-project FateMaster.Web.API
dotnet ef database update --project FateMaster.Infrastructure --startup-project FateMaster.Web.API
启动网站API
cd FateMaster.Web.API
dotnet run
# 访问 https://localhost:5001/swagger
启动管理后台API
cd FateMaster.Admin.API
dotnet run
# 访问 https://localhost:5003/swagger
API 端点
Web.API (网站前端)
获取价格配置
GET /api/divination/prices
提交卜卦请求
POST /api/divination/submit
Content-Type: application/json
{
"type": "bazi",
"inputData": "{\"name\":\"张三\",\"birthDate\":\"1990-01-01\"}",
"paymentMethod": "alipay",
"amount": 99,
"language": "zh-CN"
}
获取卜卦结果
GET /api/divination/{id}
Admin.API (管理后台)
获取所有价格配置
GET /api/admin/prices
更新价格配置
PUT /api/admin/prices/{id}
Content-Type: application/json
{
"serviceType": "bazi",
"price": 99.00,
"currency": "CNY",
"isEnabled": true
}
获取卜卦记录列表(分页)
GET /api/admin/records?page=1&pageSize=20&type=bazi&paymentStatus=paid
获取统计数据
GET /api/admin/records/statistics
架构优势
1. 关注点分离
- 每一层都有明确的职责
- 业务逻辑与基础设施解耦
- 易于理解和维护
2. 可测试性
- 依赖注入使单元测试更容易
- Repository模式便于Mock数据层
- 服务层可独立测试
3. 可扩展性
- 新增功能只需添加相应的服务
- 更换数据库只需修改Infrastructure层
- 支持多个API项目共享业务逻辑
4. 依赖规则
- 内层不依赖外层
- 依赖方向:API → Application → Domain
- Infrastructure实现Domain定义的接口
开发指南
添加新功能
- 在
Domain/Entities中定义新实体 - 在
Shared/DTOs中定义对应的DTOs - 在
Application/Interfaces中定义服务接口 - 在
Application/Services中实现服务 - 在
Infrastructure中添加数据访问代码(如需要) - 在 API 项目中添加控制器
代码规范
- 使用
record定义 DTOs - 使用
async/await处理异步操作 - 统一使用
ApiResponse<T>包装响应 - 使用
ILogger记录日志 - 遵循 SOLID 原则
技术栈
- .NET 8.0:最新的.NET平台
- ASP.NET Core:Web API框架
- Entity Framework Core 8.0:ORM框架
- Pomelo.EntityFrameworkCore.MySql:MySQL数据库提供程序
- Swagger/OpenAPI:API文档
下一步建议
- 添加认证授权:为Admin.API添加JWT认证
- 添加缓存:使用Redis缓存热点数据
- 添加日志系统:集成Serilog或NLog
- 添加单元测试:为核心业务逻辑编写测试
- 添加API限流:防止恶意请求
- 添加健康检查:监控应用状态
- 添加Docker支持:容器化部署
许可证
本项目遵循 MIT 许可证。