视频站日志 - 03 我是如何独立开发软件 - 后端篇
视频
https://www.bilibili.com/video/BV1UK411Q7yk
前言
文本会介绍下我后端开发的习惯和工具,希望对大家有一点点的帮助。
猫哥视频站 https://ducafecat.com
正文
系统架构
作为独立开发者,可以完成 客户端 + 应用层 的单体服务开发工作。
分布式、微服务 对于独立开发者来说,我就不在这里扯了,这需要一个团队。
逻辑模型设计
根据业务先整理出一个 ER 关系图,然后再根据 ER 关系图生成数据库表结构。
数据层 - 代码生成器
一般这种方式适用关系数据库,比如 MySQL、PostgreSQL、SQL Server 等。
通过表关系生成数据层、简单的 CURD 界面,加快开发速度,就是基础的数据层,你不用再费时间去写了,缺点是当数据结构变动了你要重新生成,并且要小心升级你的代码,特别是服务层。
- java 插件 MyBatisX
https://plugins.jetbrains.com/plugin/10119-mybatisx
生成 entity、mapper、service、mapper.xml
- golang 基于界面的代码生成器
生成规则配置,关联字典、关联表。
这是我一直在用的一套,框架是 gf 后台管理基于 gfast 魔改。
生成后端数据层、服务层、控制器层,前端 CURD 界面层。
效果 - CURD 界面
数据层 - 基于可视化动态配置
我用的是 https://strapi.io
这种方式的数据库设计有点像 mongo,都是通过界面进行管理(设计数据结构、管理业务数据)。
缺点是对你的表设计能力有要求,比如事务处理、数据冗余、数据容错。
适合项目前提快速推进。
界面 - 实例对象管理
界面 - 数据管理
通过 graphql 访问数据
应用层技术选择
- nodejs
- golang
- python
- php
- java
其实用哪个语言写应用层还是看你的熟练那种语言。
我之前用 go 比较多,最近用 nodejs 也是想体验下。
框架选的 fastify ,直接用 js 写,没有用 nestjs + ts。
如果选 ts 这种繁琐的方式,我还不如直接 java、go,肤浅的我暂时是这样考虑的。
缺点是没有类型检查,对新手不是很友好,但是适应段时间就会发现很自由,前提你有套规范去约束。
如果是前端直接上 nodejs,这样你用 javascript 就可以写前端和后端,降低你的复杂度。
如果是公司上项目,那就优先 go、java 了,因为招聘方便点。
视频站架构
fastify 写 api,通过 graphql 去访问 strapi 的数据。
nextjs 写的前端 ssr 服务,访问 fastify 的 api。
strapi 对外网是隔离的不可访问。
redis 缓存写数据。
mysql 数据库用的阿里有数据服务, 自动备份。
记得异地容灾。
部署 & 容器化 & 持续集成
服务有两个
- nextjs 的学习网站
- fastify 的 api 服务
部署的时候都生成 Docker 镜像推送到阿里的镜像仓库。
然后服务器上通过 docker-compose 拉取最新镜像来启动服务。
持续集成用的阿里的服务,毕竟我服务器就是用的阿里的,这样就全套了,记得设置在一个区域机房里。
- codeup 代码托管
- 流水线 flow
总结
最后几点建议:
- 可以玩下 strapi 看看是否适合自己
- 如果是前端,推荐 nodejs 写后端应用
- 全栈后端推荐学习:
- linux shell 方式安装软件、配置环境
- docker 部署项目
- sql 关系数据库设计、使用
end