文章

从 0 到 1 设计和开发一个普拉提约课 APP

经历 2 个月左右的时间,个人独立开发了一款普拉提约课 APP。以前听媳妇说想要将来开一家普拉提健身馆,在简单了解需求之后,决定从 0 开始设计和开发,由于之前个人是主要偏向于后端架构以及运维,前端知识完全是一个小白,需要从 0 开始学习,所以 APP 决定暂时先使用微信小程序。

先直接贴上微信小程序码(因为是主体是个人,仅用于个人学习和测试):

小程序码-Eric技术圈

业务方案

在进行 1 对 1 的需求澄清之后,使用 Keynote 设计了一下功能全景和关键角色的业务流程。

业务功能全景

  • 应用分为:会员端管理端,用户分为:会员、教练和运营人员。

  • 会员可以直接静默登录到小程序端,可以切换不同的场地,选择教练发起预约以及预约管理。

  • 教练和运营人员通过账号和密码登录到管理端,可以进行场馆管理、公告管理、教练管理、课程管理、预约管理、用户管理、系统管理等功能。

架构设计

1️⃣ 应用架构设计:向上承接业务需求,向下指导技术方案落地。

因为是个人项目,中间件和云服务尽量简单化,但是架构设计做好高可扩展性,后端分层架构虽然采用 DDD 的模式,但需要兼顾高效的 CRUD 操作。可以先参考下我之前的文章:

在以上文章内容中,做了调整,增加了 CQRS。

管理端和微信小程序的分层架构尽量保持一致,相似代码尽量复用,减少开发时间,提升效率。

应用架构

2️⃣ 技术选型:因为是个人项目,没有历史包袱和复杂业务逻辑,技术选型都会尽量采用最新的框架进行设计和开发。

技术选型

3️⃣ 核心数据模型设计:提前设计好项目中所需要的数据模型,梳理其中的依赖关系和数量关系。这一步其实也是非常重要,尤其是复杂项目,能否提前梳理出来关键数据模型,以及实时进行更新,能够高效的指导项目顺利的开展,避免出现大量的返工情况。

数据模型

4️⃣ 工作量评估:接下来就是对项目进行工作量评估了,我将不同端进行拆分,主要分为:管理端、小程序端、非功能需求,按照之前项目经验进行评估,再考虑到个人能力进行了大量缩减。

因为没有使用类似 Jira、Trello 等看板工具进行跟踪,但是简单记录下每日的核心工作,便于后续分析和改进。

功能清单和工作量估算

在完成以上四步之后,就开始加速撸代码了,其中管理端和小程序端的开发花的时间最多了,一是之前没有相关技术知识积累,需要先抽出时间进行学习和整理,二是没有项目经验,很多坑要一个个躺过去。虽然上了各种 AI 进行辅助,但是有些具体的坑,解决起来还是比较费劲。

功能展示

管理端

主要功能有:

  • 封装脚手架,支持 React、Vite、AntDesign 和 TypeScript

  • 封装 CRUD 组件,支持分页、筛选、排序等功能

  • 封装 API 请求工具类

  • 支持 Light / Dark 模式切换

  • 支持 i18n 多语言的切换

  • 通用化列表、详情、编辑表单等通用页面和操作按钮

  • 用户注册与登录,修改密码、退出登录,权限控制资源访问等

  • 核心功能模块支持:场馆管理、教练管理、课程管理等

  • 复杂的排课周视图

接下来一些界面的展示:

管理端功能全景

预约详情

日历排课功能

简单的视频演示:参考微信公众号文章

小程序端

可以直接上小程序进行体验,已经开放了权限,游客也能直接使用。因为主体是个人的原因且没有加上隐私协议,很多功能开发完成后无法上线,审核不过,都打回 4、5 次了。

小程序码-Eric技术圈

小程序首页图:

小程序首页图

后端

个人主要是后端方向,这次所有的都采用最新的框架,花费时间最多的反而是权限认证和授权,需要满足多端,灵活的权限控制花费了不少时间,最难受的是 Spring Secury 真的是年年变,升级到最新的版本又得重新看文档学习和开发。感觉个人项目完全没有必要使用它,带来了极大的复杂性,后续项目想要考虑下 SA-Token 或者自建轻量化 Filter 校验。如果想要了解 Spring Security 原理的可以参考我之前的文章:https://flyeric.top/archives/spring-security-jwt-frontend-separation-architecture

Security 代码结构

本地调试离不开中间件,支持兼容 H2、MariaDB、MySQL 等多种数据,生产使用 MySQL,本地调试使用 MariaDB 或 H2,非常的快速,极大的提高了本地调试的效率。

运维和发布

这块也很关键,如果是个人项目的不需要整太复杂的集群项目,类似:K8S 之类的,节约成本先直接上 Docker 运行。简单的资源列表如下:

  • 云服务 + 公网 IP

  • 域名(Optional):国内最好进行域名备案和公安备案

  • 免费的 SSL:使用 Let's Encryptd 即可,白嫖还是到期自动续

  • MySQL:可以购买云服务,我先直接在云服务器上部署,通过公网 IP 进行暴露

  • Nginx:对服务器进行反向代理,管理好自己服务器的不同端口对应的项目

  • Docker

  • 日志平台

小程序审核被驳回了 4、5次了,后面又加了很多代码逻辑进行功能的隐藏和文本替换(有些恶心人了)。很多规则在审核之前最好看看官方的文档,可以参考:

微信小程序平台运营规范

微信小程序平台审核常见被拒绝情形

每次发起审核的时候,腾讯会对你的服务器进行安全攻击,同时会有大量的请求打到服务器,不要慌,不是黑客攻击你,如下图:

腾讯安全性攻击测试

小结

全栈确实是一个不错的选择,但是学习成本确实不小,后续会尝试一下 Rust 语言 和 IOS 平台,然后继续深入学习 AI。当你能够高效完成一样东西的时候,很多东西能够想成框架、模块化,慢慢的 AI 它就能完成了,也许不久的将来,AI 会替代你。


欢迎关注我的公众号“Eric技术圈”,原创技术文章第一时间推送。

License:  CC BY 4.0