# DDD架构后台管理系统 **Repository Path**: zongyichen/MyBackendManagementSystem ## Basic Information - **Project Name**: DDD架构后台管理系统 - **Description**: 尝试从数据库设计写一个.net8 框架的 DDD 架构 WebAPI 的后台管理系统。 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-10 - **Last Updated**: 2024-07-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### 尝试从数据库设计写一个.net8 框架的 DDD 基础四层(表现层,领域层,应用层,基础设施层)设计 webapi 后台管理系统。 ##### 基础业务,一个通用后台管理系统框架、实现用户的登录、注册、修改密码等操作 ###### 数据表设计 1. 用户表(User) - UserId (GUID) - UserName(string) - Email(string) - PasswordHash(string) - CreateAt(DateTime) - UpdateAt(DateTime) 2. 角色表(Role) - RoleId(GUID) - Name(string) - Illustrate(string) 3. 权限表(Permission) - PermissionId(GUID) - Name(string) - Illustrate(string) 4. 用户角色表(UserRole) - UserId(GUID) - RoleId(GUID) 5. 角色权限表(RolePermission) - RoleId(GUID) - PermissionId(GUID) ###### 创建.net8 项目 dotnet new webapi -n MyBackendManagementSystem.Api ###### 创建解决方案和项目结构 dotnet new sln -n MyBackendManagement ###### 遵循 DDD 原则,拆分多个类库,并且将其添加到解决方案中 1. 创建类库项目 - dotnet new classlib -n MyBackendManagementSystem.Domain - dotnet new classlib -n MyBackendManagementSystem.Infrastructure - dotnet new classlib -n MyBackendManagementSystem.Application 2. 添加到解决方案 - dotnet sln add .\MyBackendManagementSystem.API\ - dotnet sln add .\MyBackendManagementSystem.Domain\ - dotnet sln add .\MyBackendManagementSystem.Infrastructure\ - dotnet sln add .\MyBackendManagementSystem.Application\ ###### 1. 在领域层(Domain)根据设计数据表创建实体类(定义领域模型) Domian/Entities - User.cs - Role.cs - Permission.cs - UserRole.cs - RolePermission.cs ###### 2. 在基础设施层(Infrastructure)配置数据库上下文 Infrastructure/Configurations - ApplicationDbContext.cs ###### 3. 在表现层(API)通过 Startup 配置依赖注入 API - Program.cs - Startup.cs ###### 4. 在用户界面层(API)测试控制器 API/Controllers - UsersControllers ###### 5. 配置数据库连接字符串尝试连接数据库 1. 配置数据库连接字符串 API -appsettings.json 2. 生成数据库迁移文件 - `dotnet ef migrations add Init_Rbac -p .\MyBackendManagementSystem.Infrastructure\ -s .\MyBackendManagementSystem.Api\` 3. 更新到数据库 - `dotnet ef database update -p .\MyBackendManagementSystem.Infrastructure\ -s .\MyBackendManagementSystem.Api\` ###### 6. 在领域层添加用户注册服务 Domain/Services - IUserService.cs ###### 7. 在表现层创建用户注册模型 API/Dto -RegisterUserDto.cs ###### 8. 在应用层具体实现用户注册功能 Application/Services - UserService.cs ###### 9. 在表现层实现控制器处理注册请求 (职责单一原则) API/Controllers - UsersController.cs ##### 至此为止,实现了后台管理系统从零到一的转变,接下来进行不足之处的修改,以及服务的添加 ###### 添加登录功能 1. 在领域层更新用户服务接口 Domain/Services - IUserServices.cs 2. 在应用层实现接口 Application/Services - UserServices.cs 3. 在表现层创建登录模型 Api/Dto - LoginUserDto.cs 4. 在表现层实现控制器 Api/Controllers - UsersController.cs ###### 添加过程中发现报错异常无法捕获,以及定义类型十分繁琐,于是创建了一个通用的报错类,来对全局的错误进行捕获以及返回. 1. 创建一个通用的报错类,定义字段 Application - ApiError.cs 2. 创建全局异常过滤器,来捕获所有未处理的异常 Application - ApiExceptionFilter.cs 3. 注册全局异常过滤器 Api - Startup.cs 4. 在控制器中测试成功 ###### 为用户登录添加 JWT 1. 在用户服务接口中添加`GenerateJwtToken`法来生成JWT Domain/Services - IUserService.cs 2. 在实现类中具体实现方法 Application/Services - UserService.cs 3. 在Startup中配置JWT身份验证 Api - Startup.cs 4. 在配置文件中添加JWT配置 Api - appsettings.json 5. 更新User控制器,测试通过