视频站日志 - 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

Last Updated:
Contributors: ducafecat