项目架构说明文档
·
光伏监控系统项目架构说明文档
本文章是记录自己正在做的光伏监控系统,由于目前只做了一半,,由AI生成项目架构文档,主要是记录目录结构,和RBAC权限管理,以后可以直接复制本文进行生成初始项目。
1. 项目概览
PMS(Project Management System)是一个基于 ASP.NET Core 8.0 的综合性管理系统,集成了用户权限管理、设备管理、Modbus 通信等功能。系统采用分层架构设计,具有良好的可扩展性和可维护性。
1.1 核心功能
- RBAC 权限管理:基于角色的权限控制体系
- 设备管理:网关和设备的监控与管理
- Modbus 通信:与现场设备的通信功能
- 菜单管理:基于数据库的动态菜单生成
- 系统设置:系统配置和参数管理
1.2 技术栈
- 后端:ASP.NET Core 8.0、Entity Framework Core 8.0
- 数据库:SQL Server
- 前端:LayUI、JavaScript、CSS3
- 定时任务:Quartz.NET
- 通信协议:Modbus TCP
2. 系统架构
2.1 分层架构
PMS 系统采用经典的三层架构设计,各层职责明确,边界清晰:
2.2 核心模块关系
3. 目录结构
PMS/
├── PMS.Models/ # 数据模型层
│ ├── DTO/ # 数据传输对象
│ │ ├── UserInfoDTO.cs
│ │ └── ViewMenuDTO.cs
│ ├── Entitys/ # 实体类
│ │ ├── User.cs
│ │ ├── Role.cs
│ │ ├── Menu.cs
│ │ ├── Permission.cs
│ │ ├── Gateway.cs
│ │ ├── Device.cs
│ │ ├── RoleUser.cs
│ │ ├── RoleMenu.cs
│ │ └── RolePermission.cs
│ └── PMS.Models.csproj
├── PMS.DAL/ # 数据访问层
│ ├── DataBase/ # 数据库相关
│ │ ├── MyDbContexts.cs
│ │ └── DbInitializer.cs
│ ├── IRepository/ # 仓库接口
│ │ ├── IRepository.cs
│ │ ├── IUserRepository.cs
│ │ ├── IRoleRepository.cs
│ │ ├── IMenuRepository.cs
│ │ └── IPermissionRepository.cs
│ ├── Repository/ # 仓库实现
│ │ ├── Repository.cs
│ │ ├── UserRepository.cs
│ │ ├── RoleRepository.cs
│ │ ├── MenuRepository.cs
│ │ └── PermissionRepository.cs
│ └── PMS.DAL.csproj
├── PMS.BLL/ # 业务逻辑层
│ ├── IServices/ # 服务接口
│ │ ├── IUserService.cs
│ │ ├── IRoleService.cs
│ │ └── IMenuService.cs
│ ├── Services/ # 服务实现
│ │ ├── UserService.cs
│ │ ├── RoleService.cs
│ │ └── MenuService.cs
│ ├── Jobs/ # 定时任务
│ │ └── ModbusDataGenerationJob.cs
│ └── PMS.BLL.csproj
└── PMS.Web/ # 表现层
├── Controllers/ # 控制器
│ ├── AccountController.cs
│ ├── UserController.cs
│ ├── RoleController.cs
│ ├── MenuController.cs
│ └── HomeController.cs
├── ViewComponents/ # 视图组件
│ └── MenuViewComponent.cs
├── Views/ # 视图
│ ├── Shared/_Layout.cshtml
│ ├── Account/Login.cshtml
│ └── Home/Index.cshtml
├── Program.cs # 应用启动
└── PMS.Web.csproj
4. 核心功能模块
4.1 权限管理模块
功能说明:实现基于角色的权限控制(RBAC),包括用户、角色、权限的管理。
核心流程:
- 用户登录验证
- 基于角色获取菜单权限
- 基于权限控制页面访问
关键类:
UserService:用户管理服务RoleService:角色管理服务MenuService:菜单管理服务MenuViewComponent:动态菜单生成
权限控制流程:
4.2 设备管理模块
功能说明:管理网关和设备,包括设备状态监控、数据采集等。
核心实体:
Gateway:网关设备Device:终端设备CommunicationSettings:通信设置
设备类型:
- 光伏组串(PVString)
- 逆变器(Inverter)
- 汇流箱(CombinerBox)
- 电表(Meter)
4.3 菜单管理模块
功能说明:基于数据库的动态菜单生成,支持多级菜单和权限控制。
核心流程:
- 用户登录后获取角色
- 根据角色查询可访问菜单
- 生成树形菜单结构
- 渲染到前端页面
菜单结构:
- 首页
- 系统管理
- 用户管理
- 角色管理
- 权限管理
- 菜单管理
- 业务管理
- 数据查看
- 数据编辑
- 系统设置
- 网关管理
- 设备管理
- -通信管理
5. 数据库设计
5.1 核心表结构
用户表(User)
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| Id | int | 主键 |
| Username | nvarchar(50) | 用户名 |
| Password | nvarchar(100) | 密码 |
| RealName | nvarchar(50) | 真实姓名 |
| nvarchar(100) | 邮箱 | |
| IsActive | bit | 是否激活 |
| CreatedAt | datetime | 创建时间 |
角色表(Role)
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| Id | int | 主键 |
| Name | nvarchar(50) | 角色名称 |
| Description | nvarchar(200) | 角色描述 |
菜单表(Menu)
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| Id | int | 主键 |
| Name | nvarchar(50) | 菜单名称 |
| Url | nvarchar(200) | 菜单URL |
| Icon | nvarchar(50) | 菜单图标 |
| PermissionCode | nvarchar(50) | 权限代码 |
| ParentId | int | 父菜单ID |
| SortOrder | int | 排序顺序 |
| IsActive | bit | 是否激活 |
权限表(Permission)
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| Id | int | 主键 |
| Name | nvarchar(50) | 权限名称 |
| Code | nvarchar(50) | 权限代码 |
| Description | nvarchar(200) | 权限描述 |
关系表
- RoleUser:角色-用户关联表
- RoleMenu:角色-菜单关联表
- RolePermission:角色-权限关联表
5.2 数据初始化
系统启动时会自动执行数据初始化,包括:
- 权限数据(8个默认权限)
- 角色数据(Admin、User)
- 用户数据(admin、user、manager)
- 菜单数据(11个默认菜单)
- 角色权限关联
- 角色用户关联
- 角色菜单关联
- 网关数据(4个默认网关)
- 设备数据(9个默认设备)
- 通信设置
6. 技术实现亮点
6.1 分层架构设计
- 模块化:各层职责明确,便于维护和扩展
- 依赖注入:使用 ASP.NET Core 内置的依赖注入容器
- 接口隔离:通过接口定义服务契约,实现松耦合
6.2 数据访问层
- 通用仓库模式:实现了
IRepository<T>通用接口 - 异步操作:所有数据访问方法均支持异步
- 事务管理:数据初始化使用事务确保数据一致性
6.3 业务逻辑层
- 服务层封装:业务逻辑集中在服务层处理
- 权限验证:基于角色的权限控制
- 定时任务:使用 Quartz.NET 实现 Modbus 数据采集
6.4 表现层
- MVC 模式:经典的 Model-View-Controller 架构
- 视图组件:使用
MenuViewComponent实现动态菜单 - 认证授权:基于 Cookie 的身份验证
6.5 前端实现
- LayUI:现代化的前端 UI 框架
- 响应式设计:适配不同屏幕尺寸
- 动态菜单:基于用户权限动态生成
7. 系统配置与部署
7.1 配置文件
- appsettings.json:应用配置
- appsettings.Development.json:开发环境配置
7.2 数据库连接
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=PMS;Trusted_Connection=True;MultipleActiveResultSets=true"
}
7.3 部署步骤
- 确保安装了 .NET 8.0 SDK
- 配置数据库连接字符串
- 执行
dotnet build构建项目 - 执行
dotnet run启动应用 - 首次运行会自动创建数据库并初始化数据
8. 安全特性
8.1 认证与授权
- Cookie 认证:安全的身份验证机制
- 基于角色的授权:细粒度的权限控制
- 访问控制策略:通过策略控制页面访问
8.2 数据安全
- 参数化查询:防止 SQL 注入
- 事务管理:确保数据操作的原子性
- 数据验证:服务端数据验证
9. 性能优化
9.1 数据访问优化
- 异步操作:提高并发处理能力
- 延迟加载:按需加载关联数据
- 缓存机制:减少数据库查询
9.2 代码优化
- 依赖注入:减少对象创建开销
- 异步编程:提高响应速度
- 资源管理:使用 using 语句确保资源释放
10. 扩展与维护
10.1 扩展点
- 新功能模块:可通过添加新的控制器和服务实现
- 新设备类型:可扩展
DeviceTypeEnum枚举 - 新通信协议:可实现新的通信服务
10.2 维护建议
- 定期备份:定期备份数据库
- 日志监控:监控系统运行日志
- 代码更新:遵循版本控制规范
11. 总结
PMS 系统是一个功能完整、架构清晰的管理系统,采用现代 ASP.NET Core 技术栈,实现了权限管理、设备管理、Modbus 通信等核心功能。系统具有良好的可扩展性和可维护性,适合作为企业级应用的基础框架。
通过分层架构设计、依赖注入、异步编程等技术,系统在性能和可靠性方面都有良好的表现。同时,完善的数据初始化和权限控制机制,确保了系统的安全性和稳定性。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)