本文是一人工作室教程的系列文章,上一节说到我将以自己开发的项目为例介绍一下项目的设计。
项目背景
首先,我先简单介绍一下自己的一些情况,我在外读书工作了十年,12年到武汉读书,15年11月份被一家上海的金融公司招去当实习生,16年毕业转正,20年从工作了4年的金融公司A跳到金融公司B,22年离职,7月份回福建。由于是裸辞的,所以一开始先休息了一周,本来想好好逛逛泉州,但是发现自己对泉州没有太多的了解。因此,当时就有个想法,要做一个汇集泉州本地人都觉得好的美食、景点的应用,让以后像我这种多年在外的本地人或者来泉旅客可以有一个参考。该项目我命名为泉州旅游指南,后续将以这个名字指代该项目。
想法整理
- 想要保证应用推荐的美食、景点都是有质量的,那就一定得有人工审核,但是由用户上传,后台审核对体验不好,而且也没有用户会去上传,毕竟这是一个人做出来的小项目。所以数据需要自己去收集、手工录入,因此需要一个后台管理页面
- 需要有一个地图页面展示周边推荐的美食、景点,这种交互方式对于目标不是很明确的用户比较清晰、友好。并且点击兴趣点,可直接跳转到地图导航
- 需要有用户模块,便于用户收藏、评论,但是周边兴趣点列表、兴趣点详情等,都允许游客用户直接查看
- 兴趣点详情页面需要展示基础信息以及网上各大平台的评论、文章、视频,以供用户充分了解。展示其他平台收集到的数据时,需要明确标明出处,数据库需要记录素材来源链接
产品原型设计
产品原型设计主要是为了清晰地记录最初的想法,作为后续项目实现的一个参考。可以使用设计软件、画图软件、甚至在纸上画图也行
数据库选用
由于我工作中常用的数据库是 SqlServer,但是个人项目不可能去使用 SqlServer,毕竟要花钱,所以我咨询了一下朋友,朋友推荐我使用 PostgreSql。在数据库选用方面上,选择自己熟悉的、免费的数据库即可,毕竟是独立开发项目,成本需要降到最低。一般自己买云服务器来装数据库成本会比直接买云数据库低很多。
缓存服务选用
不管项目规模大小,我的建议是都需要加上缓存层。工作年数多了,就会遇到一些老项目,请求直接怼到数据库;还有现在越来越多低代码框架以及许多 Graphql 项目也都是请求直接怼到数据库,甚至前端直接配置 sql 语句。个人不喜欢也不推荐这种做法,一定要加缓存层,保护好数据库,保护好基础设施。
对于规模很小的项目,确信只会部署一个实例的情况,可以直接使用内存缓存。对于需要用到缓存服务器的,推荐专门买一个配置差不多的服务器作为基础设施服务器,数据库、缓存服务器都部署在上面,省钱嘛,挤一挤够用的。建议基础设施不要和应用服务放在同一台机器,因为应用服务经常更新,可能会存在某些bug,导致CPU、内存或者磁盘耗尽,会影响到基础设施的服务状态。
后台管理页面设计
本项目需要通过后台管理页面录入的数据只有美食、景点,后台也只需要管理员一个角色,因此不需要太多复杂的功能,选用框架时只要能快速实现增删查改即可。
在这里,我想强烈推荐百度低代码框架 Amis。刚刚我有说过我不是很喜欢低代码框架,因为请求会直接怼到数据库,但是 Amis 和其他低代码框架不一样,Amis 是一个低代码前端框架,她只负责通过读取 js 配置对象生成对应的前端页面。
在本项目实现过程中,后台管理页面和 H5 页面调用的接口都是同一个服务下的,都是使用内存作为缓存的一套接口,而不是直接怼数据库的。后续将专门更新几期 Amis 的使用教程。
后端接口设计
由于是一个人做项目,所以一般体量不会大,大多数情况一个服务实例就够用了,因此不要去搞什么 MicroService、CloudNative,纯粹浪费时间。用尽可能简单的结构来节省时间成本,直接使用 Spring Boot、Asp.Net Core 之类的大众化框架,或者使用你最熟悉的框架即可。
本项目需要使用到用户模块,但开发用户模块是又费力又不讨好,因为一个小项目就要做一次用户开发、一套用户表结构,而且对用户也不友好,用你一个小功能,就要注册一个账号。因此直接使用身份认证平台或者使用 OAuth 库,能快速完成用户模块的实现,减少大量的重复开发。
身份认证平台可以参考 Auth0 (国外)、Authing (国内),试用 Authing 的话,需要做好被电话营销的准备。
OAuth 库,java 可以使用 JustAuth 。
.net 的话,可以使用我自己封装的 V.User.OAuth ,但是支持的平台不多,因为很多平台实在太难申请或者太不友好了。
顺便一提,本项目使用的是自己封装的 V.User 来实现用户模块,V.User 引用了 V.User.OAuth 并且实现了手机号、邮箱注册登录的功能,后续也会更新 V.User 的使用教程。
在这边还要再推荐一个 .net 的数据库查询类库 SqlKata ,该类库可以用比较优雅的编码方式生成 sql,然后使用 Dapper 执行sql。
H5 开发设计
由于我不是专业的前端开发,所以我的建议可能不准确,可供想要开发前端的后端开发者参考。对于 H5 页面,我建议移动端、PC 端分开开发,不要想着一套框架、一套代码兼容两个平台。移动端我使用的是 Vant 框架,PC 端以前用的是 ElementUI 框架,但是现在很少用了,因为我现在基本不开发 PC H5 应用了。
因为后端开发在刚开始写前端的时候,经常就是能显示就行,所以 html 代码都是复制粘贴改一改,这样会导致代码很乱不好维护,所以建议多封装组件。
最后
本文主要简单介绍了下整个项目各个环节的大体设计思路,更多开发细节会在后续教程中介绍。