# wanandroid Uniapp 项目 - 模块化重构说明 ## 项目概述 本项目是基于Uniapp框架开发的wanandroid客户端应用,已按照软件工程原则进行了模块化重构,提高了代码的可维护性、可复用性和可扩展性。 ## 目录结构 ``` uniapp/ ├── common/ # 公共资源 │ ├── api/ # API接口管理 │ │ ├── home.api.js # 首页模块API │ │ └── project.api.js # 项目模块API │ ├── utils/ # 工具函数 │ │ ├── request.js # 统一请求工具 │ │ └── common.js # 通用工具函数 │ ├── constants/ # 常量定义 │ │ └── app.constants.js # 应用常量 │ └── config/ # 配置文件 │ └── api.config.js # API配置 ├── components/ # 公共组件 │ ├── common/ # 通用组件 │ │ ├── loading.vue # 加载组件 │ │ └── empty-state.vue # 空状态组件 │ ├── home/ # 首页专用组件 │ │ └── banner.vue # Banner轮播组件 │ └── project/ # 项目模块专用组件 │ └── category-tabs.vue # 分类标签组件 ├── pages/ # 页面 │ ├── home/ # 首页模块 │ │ └── index.vue # 首页页面(已重构) │ ├── project/ # 项目模块 │ │ ├── project.vue # 项目列表页面(已重构) │ │ └── project-detail/ # 项目详情 │ ├── wxarticle/ # 公众号模块 │ ├── tree/ # 体系模块 │ └── mine/ # 我的模块 ├── static/ # 静态资源 │ ├── images/ │ ├── icons/ │ └── fonts/ └── store/ # 状态管理(待实现) ``` ## 模块化设计原则 ### 1. 单一职责原则 - 每个模块/组件只负责一个特定的功能 - API管理、UI组件、业务逻辑分离 ### 2. 高内聚低耦合 - 相关功能集中管理(如首页所有API在`home.api.js`中) - 模块间通过清晰的接口通信 ### 3. 可复用性 - 提取公共组件(Loading、EmptyState等) - 工具函数统一管理 - 配置集中管理 ### 4. 可维护性 - 清晰的目录结构 - 统一的代码规范 - 完善的错误处理 ## 已完成的模块 ### 1. 首页模块 (`/pages/index/index.vue`) - **功能**:Banner轮播、文章列表、搜索热词 - **组件**:HomeBanner、CommonLoading、EmptyState - **API**:`home.api.js`(统一管理首页所有API) - **特性**: - 下拉刷新、上拉加载 - 图片懒加载 - 回到顶部功能 - 完善的错误处理 ### 2. 项目模块 (`/pages/project/project.vue`) - **功能**:项目分类、项目列表、项目搜索 - **组件**:ProjectCategoryTabs、CommonLoading、EmptyState - **API**:`project.api.js`(统一管理项目所有API) - **特性**: - 分类标签切换 - 项目网格布局 - 点赞、收藏、查看源码 - 项目状态标识(NEW、HOT) ## 公共组件 ### 1. CommonLoading (`components/common/loading.vue`) - 统一的加载动画组件 - 支持自定义文本和样式 - 支持全屏和局部加载 ### 2. EmptyState (`components/common/empty-state.vue`) - 空状态提示组件 - 支持自定义图标、标题、描述 - 支持操作按钮 ### 3. HomeBanner (`components/home/banner.vue`) - Banner轮播组件 - 支持自动播放、循环播放 - 支持点击事件和跳转 ### 4. ProjectCategoryTabs (`components/project/category-tabs.vue`) - 项目分类标签组件 - 支持水平滚动 - 选中状态指示器 ## API管理 ### 统一请求工具 (`common/utils/request.js`) - 封装`uni.request`,提供统一的错误处理 - 支持请求拦截器和响应拦截器 - 支持GET、POST、PUT、DELETE方法 - 自动处理加载状态 ### API配置 (`common/config/api.config.js`) - 统一管理所有API接口地址 - 按模块分组管理 - 支持环境配置 ### 模块化API (`common/api/`) - 每个模块有独立的API管理文件 - 提供完整的业务方法 - 统一的数据处理逻辑 ## 工具函数 (`common/utils/common.js`) - 时间格式化(相对时间、绝对时间) - 防抖和节流函数 - 深度克隆 - 安全属性访问 - 文件大小格式化 - 剪贴板操作 ## 常量定义 (`common/constants/app.constants.js`) - 应用信息 - 存储键名 - 页面路由 - 事件名称 - 错误码和错误消息 - 颜色配置 - 字体配置 - 动画配置 ## 使用示例 ### 在页面中使用API ```javascript // 导入API import { getHomeData } from '@/common/api/home.api.js' // 使用API async loadData() { try { const homeData = await getHomeData(this.currentPage) this.bannerList = homeData.bannerList this.articleList = homeData.articleList } catch (error) { console.error('加载数据失败:', error) } } ``` ### 在页面中使用组件 ```vue ``` ### 使用工具函数 ```javascript import { formatRelativeTime, debounce } from '@/common/utils/common.js' // 格式化时间 const relativeTime = formatRelativeTime(timestamp) // 防抖处理 const debouncedSearch = debounce(this.handleSearch, 500) ``` ## 后续开发建议 ### 1. 状态管理 - 实现Vuex或Pinia进行全局状态管理 - 管理用户信息、主题设置等全局状态 ### 2. 更多模块开发 - 公众号模块 (`wxarticle`) - 体系模块 (`tree`) - 我的模块 (`mine`) ### 3. 性能优化 - 图片懒加载优化 - 列表虚拟滚动 - 数据缓存策略 ### 4. 功能扩展 - 搜索功能 - 用户登录/注册 - 文章收藏 - 夜间模式 ### 5. 测试 - 单元测试 - 集成测试 - E2E测试 ## 开发规范 ### 1. 命名规范 - 组件:大驼峰命名,如`HomeBanner` - 文件:小写字母+连字符,如`home-banner.vue` - 变量:小驼峰命名,如`articleList` - 常量:大写字母+下划线,如`API_CONFIG` ### 2. 代码组织 - 每个文件不超过500行 - 每个函数不超过50行 - 使用ES6+语法 - 添加必要的注释 ### 3. 错误处理 - 所有异步操作都要有错误处理 - 用户友好的错误提示 - 错误日志记录 ### 4. 性能考虑 - 避免不必要的重渲染 - 合理使用计算属性和侦听器 - 图片优化和懒加载 ## 总结 本次重构按照软件工程原则,将项目从简单的页面堆砌重构为模块化、组件化的架构。新的架构具有以下优势: 1. **可维护性**:清晰的目录结构和模块划分 2. **可复用性**:公共组件和工具函数 3. **可扩展性**:易于添加新功能和模块 4. **可靠性**:统一的错误处理和API管理 5. **一致性**:统一的代码规范和设计模式 这种架构为后续的功能扩展和维护提供了良好的基础。