# 1.3 目录结构 ## 目录说明 在软件开发过程中,优秀的软件目录结构对于项目的组织、开发、维护和扩展至关重要,合理的目录结构能够显著提升开发效率和代码可维护性。 ```text 1. 清晰的层次结构:按照功能模块划分目录,方便团队成员快速定位代码。 2. 模块化管理:通过多模块结构,实现功能模块的独立管理,提高系统的可维护性和扩展性。 3. 分层架构:Controller(HTTP)、Logic(业务)、Model(数据)分离,职责清晰。 4. 提升开发效率:清晰的目录结构和模块划分,减少查找代码的时间,提高开发效率。 ``` ## 项目根目录 ```text ├── app/ // 后端源码 ├── ui/ // 前端源码(Vue3 + ElementPlus) ├── config/ // 配置文件 ├── document/ // 项目文档(SQL脚本、开发手册等) ├── extend/ // 扩展类库 ├── public/ // 公共资源(入口文件、上传目录) ├── route/ // 路由定义 ├── templates/ // 代码生成模板 ├── wiki/ // VitePress 文档站点 ├── vendor/ // Composer 依赖(不提交到版本控制) ├── runtime/ // 运行时缓存(不提交到版本控制) ├── .env.example // 环境变量模板 ├── .env // 环境变量(不提交到版本控制) ├── composer.json // PHP 依赖清单 ├── composer.lock // 依赖锁定文件 ├── think // ThinkPHP 命令行入口 └── README.md // 项目说明 ``` ## 后端目录 (app/) ```text app/ ├── BaseController.php // 控制器基类(统一响应、参数获取、通用CRUD) ├── BaseLogic.php // 逻辑基类(属性配置、生命周期钩子、横切处理) ├── BaseTenantLogic.php // 租户逻辑基类(继承BaseLogic,自动租户隔离) ├── BaseModel.php // 模型基类(软删除、审计字段自动写入) ├── ExceptionHandle.php // 统一异常处理(所有异常渲染为JSON) ├── common.php // 公共函数库(加密、文件处理、驼峰转换) ├── event.php // 事件定义 ├── middleware.php // 全局中间件注册 ├── attribute/ // PHP 8 注解 │ ├── Log.php // 操作日志注解(40种操作类型) │ ├── Permission.php // 权限校验注解 │ └── DemoAllow.php // 演示环境放行注解 ├── command/ // 命令行命令 │ ├── JobRunCommand.php // 定时任务一次性执行(配合系统 cron) │ ├── JobDaemonCommand.php // 定时任务常驻进程(配合 supervisor) │ ├── GeneratorCommand.php // 代码生成器 CLI │ └── DbMigrateCommand.php // 数据库迁移工具 ├── controller/ // 控制器层(HTTP 入口) │ ├── UserController.php // 用户管理 │ ├── RoleController.php // 角色管理 │ ├── MenuController.php // 菜单管理 │ ├── DeptController.php // 部门管理 │ ├── PositionController.php // 岗位管理 │ ├── LevelController.php // 职级管理 │ ├── ArticleController.php // 文章管理 │ ├── DictController.php // 字典管理 │ ├── ConfigController.php // 配置管理 │ ├── JobController.php // 定时任务 │ ├── TenantController.php // 租户管理 │ ├── GeneratorController.php // 代码生成器 │ └── ... // 其他模块 ├── logic/ // 业务逻辑层 │ ├── UserLogic.php // 用户业务逻辑 │ ├── RoleLogic.php // 角色业务逻辑 │ ├── ArticleLogic.php // 文章业务逻辑 │ ├── GeneratorLogic.php // 代码生成逻辑 │ ├── LoginLogic.php // 登录业务逻辑 │ ├── LoginLogLogic.php // 登录日志逻辑 │ ├── OperLogLogic.php // 操作日志逻辑 │ ├── IndexLogic.php // 首页/仪表盘逻辑 │ └── ... // 其他模块 ├── model/ // 数据模型层 │ ├── User.php // 用户模型 │ ├── Role.php // 角色模型 │ ├── Menu.php // 菜单模型 │ ├── UserRole.php // 用户角色关联 │ ├── RoleMenu.php // 角色菜单关联 │ └── ... // 其他模型 ├── validate/ // 验证器 │ ├── UserValidate.php // 用户验证 │ └── ... // 其他验证器 ├── task/ // 定时任务处理器 │ ├── BaseTask.php // 任务处理器基类 │ ├── HelloWorldTask.php // 测试任务(验证 daemon 调度器) │ └── SendSmsTask.php // 示例任务 └── service/ // 服务层(通用能力) ├── JwtService.php // JWT 认证(登录/刷新/解析) ├── PasswordService.php // 密码加密(bcrypt 双重加盐) ├── DictService.php // 字典服务(两级缓存) ├── ParamService.php // 系统参数服务 ├── CaptchaService.php // 验证码服务 ├── RequestInfoService.php // 请求信息解析 ├── AttributeService.php // 注解读取(反射+缓存) ├── GeneratorService.php // 代码生成服务 ├── ExcelService.php // Excel 导入导出 ├── DbSchemaBuilder.php // 跨数据库 DDL 生成器 └── DbMigrateService.php // 跨数据库数据迁移 ``` ## 后端模块内部结构 每个业务模块遵循统一的文件结构: ```text app/controller/{Name}Controller.php // HTTP 入口(注解 + 异常处理) app/logic/{Name}Logic.php // 业务逻辑(属性配置 + 钩子) app/model/{Name}.php // 数据模型(表映射) app/validate/{Name}Validate.php // 验证器(字段校验规则) ``` | 文件 | 职责 | 基类 | |------|------|------| | Controller | 接收请求、调用 Logic、返回响应 | BaseController | | Logic | 业务逻辑、属性配置、钩子处理 | BaseLogic / BaseTenantLogic | | Model | 数据库表映射、关联关系 | BaseModel | | Validate | 参数校验规则 | ThinkPHP Validate | ## 配置目录 (config/) ```text config/ ├── api.php // API 配置(驼峰转换开关) ├── app.php // 应用配置(时区/调试模式/演示模式) ├── cache.php // 缓存配置(支持 file / redis) ├── console.php // 命令行配置 ├── cookie.php // Cookie 配置 ├── cors.php // 跨域配置(允许来源/方法/头) ├── database.php // 数据库配置(5种数据库) ├── file.php // 文件上传配置(目录/域名/大小限制) ├── filesystem.php // 文件系统配置 ├── jwt.php // JWT 配置(密钥/有效期/算法) ├── lang.php // 多语言配置 ├── log.php // 日志配置 ├── middleware.php // 中间件排除列表 ├── route.php // 路由配置 ├── session.php // Session 配置 ├── tenant.php // 多租户配置(默认租户ID) ├── trace.php // 调试追踪配置 └── view.php // 视图配置 ``` ## 扩展目录 (extend/) ```text extend/ ├── jwt/ │ └── Jwt.php // JWT 工具类(签发/解析/刷新) ├── response/ │ └── Result.php // 统一响应类(code/ok/msg/data) └── (无自定义扩展类) ``` ## 代码生成模板 (templates/) ```text templates/ ├── controller.php.tpl // 控制器模板 ├── logic.php.tpl // 业务逻辑模板 ├── model.php.tpl // 模型模板 ├── validate.php.tpl // 验证器模板 ├── ui/ // 普通列表模板(前端文件) │ ├── index.vue.tpl // 列表页模板 │ ├── edit.vue.tpl // 编辑弹窗模板 │ ├── detail.vue.tpl // 详情弹窗模板 │ ├── api.ts.tpl // API 接口模板 │ ├── columns.ts.tpl // 表格列定义模板 │ └── querySchemas.ts.tpl // 查询条件模板 └── ui2/ // 树形结构模板(前端文件) ``` ## 前端目录 (ui/src/) ```text ui/src/ ├── main.ts // 入口文件(注册插件、挂载应用) ├── App.vue // 根组件 ├── api/ // API 接口定义(按业务分组) │ ├── system/ // 系统管理接口(user.ts / role.ts / menu.ts 等) │ ├── content/ // 内容管理接口 │ ├── data/ // 数据管理接口 │ ├── monitor/ // 监控管理接口 │ ├── tool/ // 工具接口(example.ts / generator.ts) │ ├── file/ // 文件接口 │ ├── region/ // 地区接口 │ ├── setting/ // 设置接口 │ ├── dashboard/ // 仪表盘接口 │ └── common/ // 公共接口(login / menu / user) ├── views/ // 页面视图(按业务分组) │ ├── login/ // 登录页 │ ├── dashboard/ // 控制台 │ ├── system/ // 系统管理页面(user / role / menu / dept / position / level / tenant) │ ├── content/ // 内容管理页面(article / category / link) │ ├── data/ // 数据管理页面(dict / config / notice / param / city) │ ├── monitor/ // 监控管理页面(job) │ ├── file/ // 文件管理页面(fileTemplate) │ ├── tool/ // 工具页面(generator / example) │ ├── setting/ // 设置页面(profile / configWeb) │ ├── iframe/ // 内嵌 iframe 页面 │ ├── redirect/ // 重定向页面 │ ├── exception/ // 异常页面(403 / 404 / 500) │ └── about/ // 关于页面 ├── components/ // 公共组件 │ ├── Table/ // BasicTable 表格组件 │ ├── Form/ // BasicForm 表单组件 │ ├── Modal/ // Modal 弹窗组件 │ ├── Page/ // PageWrapper 页面容器 │ ├── Upload/ // 文件上传组件 │ ├── Editor/ // 富文本编辑器(TinyMce) │ ├── Cropper/ // 图片裁剪组件 │ ├── Qrcode/ // 二维码组件 │ ├── Excel/ // Excel 导入导出组件 │ ├── ChinaArea/ // 省市区联动组件 │ ├── Region/ // 区域选择组件 │ ├── Password/ // 密码强度组件 │ ├── Authority/ // 权限组件 │ ├── icon/ // 图标组件 │ └── ... // 其他组件 ├── hooks/ // 组合式函数 │ ├── index.ts // hooks 统一导出 │ ├── useTime.ts // 时间 hook │ ├── useDomWidth.ts // DOM 宽度 hook │ ├── useOnline.ts // 网络状态 hook │ ├── useBattery.ts // 电量 hook │ ├── use-async.ts // 异步操作 hook │ ├── core/ // 核心 hooks │ ├── event/ // 事件 hooks │ ├── setting/ // 配置 hooks │ └── web/ // Web hooks(含权限判断) ├── store/ // Pinia 状态管理 │ └── modules/ │ ├── user.ts // 用户 Store(Token/用户信息/权限) │ ├── asyncRoute.ts // 动态路由 Store(菜单/keep-alive) │ ├── projectSetting.ts // 项目配置 Store │ ├── tabsView.ts // 标签页 Store │ ├── designSetting.ts // 设计/主题配置 Store │ ├── lockscreen.ts // 锁屏 Store │ └── ossConfig.ts // 云存储配置 Store ├── router/ // 路由配置 │ ├── index.ts // 路由实例 │ ├── base.ts // 静态路由(登录/404) │ ├── generator-routers.ts // 动态路由生成(后端菜单→Vue Router) │ ├── router-guards.ts // 路由守卫(登录校验/菜单加载) │ └── router-icons.ts // 路由图标映射 ├── utils/ // 工具函数 │ ├── http/ // HTTP 请求封装(Axios 拦截器) │ └── Storage.ts // 本地存储封装 ├── layout/ // 布局组件(侧边栏/顶栏/内容区) ├── plugins/ // 插件注册 ├── settings/ // 项目配置(标题/主题/布局) ├── directives/ // 自定义指令(v-perm 权限指令) ├── styles/ // 全局样式(Tailwind CSS / 主题变量) ├── enums/ // 枚举定义(HTTP / 页面) └── assets/ // 静态资源(图标/图片) ``` ## 关键配置文件 | 文件 | 作用 | |------|------| | `.env` | 数据库连接、JWT 密钥、文件上传路径等环境变量 | | `config/database.php` | 数据库配置(支持 5 种数据库) | | `config/jwt.php` | JWT 配置(密钥/有效期/算法) | | `config/file.php` | 文件上传配置(目录/域名/大小限制) | | `config/cors.php` | 跨域配置(允许来源/方法/头) | | `config/middleware.php` | 中间件排除列表 | | `config/api.php` | API 配置(驼峰/下划线转换开关) | | `config/cache.php` | 缓存配置(file/redis 驱动) | | `config/tenant.php` | 多租户配置(默认租户ID) | | `ui/.env.development` | 前端开发环境配置(API 代理地址) | | `ui/vite.config.ts` | Vite 构建配置 | | `ui/package.json` | 前端依赖和脚本命令 | :::tip 注意事项 + 保持一致性:目录结构一旦确定,应保持一致性,避免随意更改。 + 合理划分模块:根据项目的实际需求,合理划分功能模块,避免过度模块化。 + 文档记录:在项目文档中详细说明目录结构和各模块的功能,便于新成员快速上手。 + 版本控制:使用 `Git` 等版本控制工具,并在 `.gitignore` 文件中配置不需要跟踪的目录和文件。 ::: ## 总结 软件架构的目录结构是项目开发和维护的基础,直接影响到项目的可维护性、可扩展性和开发效率。采用分层的目录结构(后端 Controller → Logic → Model,前端 api → views → components),结合模块化管理,是一个有效的解决方案。通过合理规划和遵循最佳实践,可以确保项目的结构清晰、功能明确,为团队开发和长期维护打下坚实的基础。