前段时间上线了一个英语词汇学习小程序「优词记 Pro」,从后端到小程序到管理后台都是自己一套撸下来的。趁着刚上线,把整个项目的技术选型和几个有意思的设计记录一下,供同样在做全栈小项目的朋友参考。
整体架构
项目分三块:
后端:Hyperf 3.1 + Swoole(PHP 8.3),MySQL + Redis
小程序端:uni-app 3.x + Vue 3 + Vite + Pinia,编译到微信小程序
管理后台:Vue 3 + Element Plus
产品功能不复杂但很聚焦:按教材同步背单词,提供拼写、中文选词、英文选义等多种练习模式,配合打卡统计、学习日历、收藏复习这些轻激励机制。没有做社区、商城之类的功能堆砌,就是一个纯粹的学习工具。
后端:为什么选 Hyperf
PHP 写业务快,但传统 FPM 模式在长连接和高并发场景下比较吃力。Hyperf 基于 Swoole 协程,常驻内存 + 连接池,对这种查询密集型的学习类应用来说,响应速度和资源占用都比 FPM 好一个量级,而开发体验又保留了 PHP 的顺手。
几个自己比较满意的设计:
数据库优先的代码生成。 没有用 migration,数据库 schema 是唯一真相源。写了一个 entity 命令读取 information_schema,自动生成 Entity(列常量、验证规则、关系声明)和 Model 文件。表结构变了跑一遍命令,代码就同步了,字段常量化之后 IDE 提示和静态分析(phpstan)都能覆盖到。
自定义路由调度器。 全站只有一条通配路由,由 Dispatcher 按约定分发:URL 前缀区分端(/admin、/user、/common),HTTP 方法映射到方法前缀(GET → get*,POST → create*)。新增接口不用注册路由,按目录结构放好文件即可。约定优于配置在小团队里确实省心。
分层强约束。 Controller → Service → Manager → Model → Entity 五层,每层职责单一。配合注解式的权限控制(#[Permission])和操作日志(#[OperationLog]),后台的 RBAC 和审计基本零侵入。
小程序端:uni-app 的工程化
uni-app 被吐槽多,但对个人项目来说「一套代码多端可跑」依然真香。我把代码分了三层:framework/(跨项目复用的基础层)、shared/(http、store、hooks、公共组件)、pages/(业务页面),基础层可以直接搬到下一个项目。
HTTP 层没有直接裸用 uni.request,而是封装了一个带拦截器链(Auth → Log → Response)的 HttpClient,401/402 自动登出、错误统一弹窗,业务代码里几乎见不到错误处理的样板代码。
一个实测踩坑:HBuilderX 的「发行」构建会和 node_modules 里的本地编译器混用,导致 easycom 组件被静默丢弃、样式错乱——最后统一走 npm 脚本构建才解决。如果你也是 HBuilderX 目录结构 + CLI 混合开发,建议构建链路只保留一条。
一些取舍
文件上传走腾讯 COS + 后端 STS 临时凭证,客户端直传,不占服务器带宽
JWT 多 Guard:管理端 7 天、小程序端 365 天,学习类工具用户不该频繁被登出
移动端所有列表统一 simplePage 模式,只关心「有没有下一页」,省掉 count 查询
最后
产品还很早期,接下来计划基于学习日志做记忆曲线相关的复习推荐。如果你正好在学英语背单词,可以在微信里搜「优词记 Pro」体验一下,也欢迎从产品或技术角度提意见——评论区聊聊你觉得背单词工具最缺什么功能?如果对 Hyperf 协程化实践或 uni-app 工程化的细节感兴趣,也可以留言,后面可以单独写一篇展开。



网友评论 0