公司动态

校园一体化管理系统 2、完整目录结构说明(试行)

📅 2026/7/16 3:25:43
校园一体化管理系统 2、完整目录结构说明(试行)
完整目录结构Client‑Blazor Api Application Domain Infrastructure Shared分层结构SchoolSaas.sln ├─ Client.Blazor # 前端项目外网独立部署Blazor‑WebAssembly非托管模式 .NET8 │ ├─ Pages # 业务页面组件按模块划分文件夹 │ │ ├── SystemManage # 系统管理员页面配置、备份、升级、监控、License导入 │ │ ├── EduPage # 教务/教研/德育主任页面 │ │ ├── TeacherPage # 班主任、任课教师页面 │ │ ├── StudentPage # 学生独立端页面 │ │ └─ ParentPage # 家长端页面 │ ├─ SharedComponents # 公共UI组件 │ │ ├── PermissionButton.razor # 权限受控按钮组件后端权限标识控制显示 │ │ ├── CommonTable.razor # 通用分页表格组件 │ │ ├── FileUpload.razor # 文件上传组件 │ │ └─ ModalDialog.razor # 弹窗公共组件 │ ├─ HttpServices # 统一封装HttpClient请求服务 │ │ ├── HttpInterceptor.cs # 请求拦截器自动附加Bearer‑Token、统一解析返回结果、Token过期跳转登录 │ │ ├── EduApiService.cs # 教务模块请求服务 │ │ ├── TeachingApiService.cs # 教研模块请求服务 │ │ └─ MoralApiService.cs # 德育模块请求服务 │ ├─ PlatformTool # 平台运营工具新增对应原有Core里版本校验 │ │ └── LicenseCheck.cs # 读取后端License校验私有化授权有效期 │ └─ wwwroot │ └─ appsettings.json # 配置外网API接口地址仅保存域名无密钥 │ ├─ SchoolSaas.Api # 后端API项目ASP.NET‑Core 8内网部署外网通过YarpIP白名单访问 │ ├─ Controllers # 控制器只返回DTO禁止返回数据库Entity实体 │ │ ├── SystemController.cs # 系统管理接口 │ │ ├── EduController.cs # 教务模块接口 │ │ ├── TeachingController.cs # 教研模块接口 │ │ └─ MoralController.cs # 德育模块接口 │ ├─ Filters # 全局过滤器对应Core层GlobalFilter、Security校验逻辑 │ │ ├── PermissionFilter.cs # JWT、RBAC权限校验、IP白名单校验内网放行、外网严格校验 │ │ ├── GlobalExceptionFilter.cs # 全局异常过滤器内网输出堆栈、外网屏蔽异常详情 │ │ ├── RequestAuditFilter.cs # 审计日志记录外网IP、操作账号、请求参数 │ │ └── ValidateFilter.cs # 参数校验、XSS过滤 │ ├─ Extensions # 新增服务注册扩展原Core模块初始化逻辑 │ │ ├── ServiceRegister.cs # 批量注入Repository、Service、SqlSugar、Redis、Hangfire │ │ └── DeployModeExtension.cs # 部署模式初始化私有化单校 / SaaS‑多租户模式切换 │ ├─ Middleware # 新增中间件原Core中间件逻辑 │ │ ├── YarpProxyMiddleware.cs # Yarp反向代理外网IP限流、https证书处理 │ │ └─ TenantMiddleware.cs # 解析当前租户信息 │ └─ Program.cs # 程序入口注册SqlSugar、JWT、CORS跨域、Hangfire定时任务、全局过滤器 │ ├─ SchoolSaas.Application # 应用服务层业务逻辑层 │ ├─ Services # 各个模块业务Service │ │ ├── BusinessService # 业务实现对应原有Module模块 │ │ │ ├── ISystemService.cs SystemService.cs │ │ │ ├── IEduService.cs EduService.cs # 学籍、排课、成绩业务 │ │ │ ├── ITeachingService.cs TeachingService.cs # 教研业务 │ │ │ └── IMoralService.cs MoralService.cs # 德育考勤业务 │ │ └─ QueryService # 跨模块查询服务契约实现对应Core里ServiceContract │ │ ├── IEduQueryService.cs │ │ ├── ITeachingQueryService.cs │ │ └─ IMoralQueryService.cs │ └─ Dtos # 入参DTO和返回DTO后续同步至Shared打包Nuget给前端使用 │ ├── InputDtos # 前端传入参数模型 │ └─ OutputDtos # 返回前端数据模型敏感字段自动脱敏 │ ├─ SchoolSaas.Domain # 领域层对应原01‑Core核心底层把核心定义全部移入Domain │ ├─ Entities # SqlSugar‑Entity实体类对应数据库表 │ │ ├── BaseEntity.cs # 全局实体基类CreatorId、CreateTime、UpdateTime、IsDeletedSqlSugar自动赋值 │ │ ├── ITenantEntity.cs # 租户接口TenantId私有化模式自动关闭TenantId过滤 │ │ ├── EduEntities # 教务相关实体Student、Class、Score │ │ ├── TeachingEntities # 教研相关实体 │ │ └─ MoralEntities # 德育相关实体 │ ├─ Enums # 系统枚举部署模式、角色类型、学籍状态、考勤状态 │ │ ├── DeployMode.cs // 枚举PrivateSingleSchool私有化模式 / SaaSMultiTenant多租户模式 │ │ └── BusinessEnums // 业务枚举 │ ├─ DomainEvents # 领域事件原Core.DomainEvent │ │ ├── IEventBus.cs │ │ ├── LocalEventBus.cs // 私有化默认本地内存事件总线 │ │ ├── MqEventBus.cs // 预留MQ模式多集群部署启用 │ │ └── EventModels // 事件实体成绩提交事件、新增学生事件 │ ├─ TenantContext # 新增原Core‑SaaSTenant租户逻辑 │ │ ├── CurrentTenant.cs // 获取当前租户ID、登录用户信息 │ │ └─ SqlSugarTenantFilter.cs // SqlSugar全局租户过滤器根据DeployMode自动启用/关闭TenantId条件 │ └─ AuthContract # 新增原Core‑AuthPermission │ ├── JwtModel.cs │ ├── PermissionModel.cs │ └── LicenseModel.cs // 私有化授权模型 │ ├─ SchoolSaas.Infrastructure # 基础设施层封装SqlSugar、Redis、工具类、定时任务 │ ├─ Repository # 基于SqlSugar实现仓储BaseRepository原Core.DataBase逻辑 │ │ ├── IBaseRepository.cs │ │ ├── BaseRepository.cs // 封装分页、联表查询、批量操作、Lambda查询 │ │ ├── UnitOfWork.cs // 工作单元统一事务提交回滚 │ │ └── DbSetup.cs // SqlSugar初始化Code‑First、读写分离配置、种子数据初始化 │ ├─ Cache # Redis缓存封装原Core.MessageQueue、Common.RedisCache │ │ ├── RedisHelper.cs // 缓存雪崩、击穿防护分布式锁 │ │ └── RedisMqProvider.cs // Redis降级消息队列、失败重试 │ └─ CommonTools # 文件操作、加解密、公共工具类对应02‑Common全部工具 │ ├── FileHelper.cs // 本地/NAS文件管理、自动清理临时文件 │ ├── ExcelHelper.cs // Excel导入导出 │ ├── BackupHelper.cs // MySQL定时备份、加密恢复 │ ├── SerializeHelper.cs // 序列化工具 │ ├── QuartzHelper.cs // Hangfire定时任务封装成绩统计、考勤汇总任务 │ ├── NotifyHelper.cs // 内网消息推送 │ └─ SecurityHelper.cs // 密码加密、数据脱敏、审计日志原Core‑Security │ └─ SchoolSaas.Shared # 公共类库打包私有Nuget包 ├─ ResultModel.cs // 统一返回模型 ResultT ├─ SharedDtos // 将Application.Dtos同步到此项目供前后端共用 ├─ CommonEnums // Domain里的枚举同步至此前端Blazor引用 └─ GlobalConsts.cs // 全局常量、正则、分页公共模型 # 规则Client.Blazor和API项目仅通过Nuget引用SchoolSaas.Shared前后端无项目引用彻底解耦一、项目依赖关系严格单向依赖禁止循环引用SchoolSaas.Api依赖SchoolSaas.Application、SchoolSaas.Infrastructure、SchoolSaas.Domain、SchoolSaas.SharedSchoolSaas.Application依赖SchoolSaas.Domain、SchoolSaas.Infrastructure、SchoolSaas.SharedSchoolSaas.Infrastructure依赖SchoolSaas.Domain、SchoolSaas.Shared引入SqlSugar、Redis第三方包SchoolSaas.Domain仅依赖SchoolSaas.Shared保持领域层纯净Client.Blazor只Nuget引用SchoolSaas.Shared不引用后端任意项目实现独立外网部署。二、核心技术落地对应SqlSugar 私有化/SAAS切换 外网前端1.SqlSugar落地Infrastructure/Repository完成SqlSugar实例创建、BaseRepository封装、UnitOfWork事务Domain/TenantContext/SqlSugarTenantFilter.cs读取Domain.Enums.DeployMode部署模式私有化模式关闭TenantId过滤SaaS模式启用SqlSugar全局过滤器自动追加租户条件DbSetup.cs统一配置SqlSugar逻辑删除、自动填充创建人、创建时间后期读写分离仅修改配置文件即可。2.网络部署结构外网前端 内网数据库内网部署SchoolSaas.Api、Application、Domain、InfrastructureMySQL、Redis部署在校内服务器外网无法直接访问外网部署Client.Blazor发布后只有wwwroot静态资源部署在外网Nginx请求链路外网浏览器 → 公网Nginx加载Blazor‑Wasm页面 → Yarp中间件IP白名单 JWT校验→ 内网Api → SqlSugar访问MySQLAPI配置CORS仅允许外网前端域名跨域访问。3.私有化和SaaS模式实现通过配置文件设置DeployMode私有化版本DeployMode PrivateSingleSchool单实例MySQLSqlSugar不处理TenantId后期多校SaaS部署切换为SaaSMultiTenantSqlSugar自动启用租户过滤可切换一校一库模式业务代码不用改动。三、各层职责概括贴合你的原有设计Client.Blazor纯前端外网独立部署仅调用后端API通过Nuget获取DTO模型SchoolSaas.Api请求入口只做鉴权、参数校验不写业务代码SchoolSaas.Application业务逻辑层实现业务规则跨模块调用QueryService解耦SchoolSaas.Domain系统内核实体、枚举、租户、领域事件、部署模式定义SchoolSaas.Infrastructure实现SqlSugar仓储、Redis缓存、定时任务、文件操作等底层能力SchoolSaas.Shared前后端共享模型打包Nu‑Get彻底解除前后端项目依赖。四、开发约束规范数据库实体只写在Domain.Entities禁止返回到前端前端只能接收Shared里的DTOService层只能调用IBaseRepository禁止在业务代码里直接使用SqlSugar敏感密钥、数据库连接字符串只放在内网服务器环境变量前端appsettings.json只有API域名控制器中不编写业务逻辑只调用Application层服务。