一文带你设计、开发简洁架构,掌握构建Go Web应用的炼金术

本文介绍了使用Go进行Web开发时如何设计四层架构(Model、Store、Biz、Controller),强调了各层职责和开发顺序,通过用户注册功能举例,详细讲解了从数据库建模到各层代码的实现,包括使用工厂模式提高代码可维护性。
摘要由CSDN通过智能技术生成

前言

本文旨在用尽量简短的话描述完在使用Go进行Web开发时,如何设计一种合理的代码架构,来确保代码的可读性、可维护性、可扩展性。

这是本人第一篇文章,不足之处还望包涵。

开发前的预热

了解四层架构设计

在Web开发中,一般都是四层架构设计:

  • model层(模型层):可以理解为建筑师在构建建筑物之前需要的设计蓝图
  • store层(存储层):可以理解为仓库或库房。在仓库中,物品被存储和管理,可以按需检索和处理。
  • Biz层(业务逻辑层):类比为经理或协调者。经理负责协调和管理团队成员的工作,确保任务按计划完成。
  • controller层(控制器层):接收和处理客户端的请求,协调各个层之间的交互,最终响应客户端的需求。

这种简洁架构设计师当前业界比较流行、比较合理的代码架构,能够确保代码的可读性、可维护性、可扩展性。

开发顺序

四层架构之间的依赖关系是:Controller 层依赖 Biz 层,Biz 层依赖 Store 层,Store 层依赖数据库,而 Controller层、Biz 层、Store 层都依赖 Model 层,如下图所示:

四层架构之间的依赖关系

在开发过程中,我一般会选择先开发依赖少的组件,这样可以确保我开发完成后能够随时测试代码功能。

所以我一般会选择:Model层 -> store层 -> Biz层 -> controller

搞清楚开发顺序后,接下来就可以一层一层的进行代码开发了,下面我以一个用户注册的功能为例来进行开发。

model层代码开发

在数据库中创建相应表

本文的重点不在于具体的业务逻辑的实现,为了能够简洁的阐述本文的主旨,所以在设计user表的时候,我只设计了三个字段,分别是自增id、用户名、密码。

在数据库中创建表结构的SQL语句为:

CREATE DATABASE `mysystem`;
USE `mysystem`;

CREATE TABLE `user` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=MyISAM AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;

创建完表后,接下来就可以将表映射到model层了。

映射数据库中相应表到model

在这里有两种方式:

  • 自己手撸代码
  • 使用db2struct工具生成

这里我个人推荐使用工具生成(毕竟在这个信息流的时代,时间就是金钱嘛)。

首先go install github.com/Shelnutt2/db2struct/cmd/db2struct下载好db2struct

接着在model文件夹里面运行如下命令:

db2struct --gorm --no-json -H 127.0.0.1 -d mysystem -t user --package model --struct UserM -u mysql数据库用户名 -p 'mysql数据库密码' --target=user.go

这段命令会在model文件夹下创建一个user.go的文件,其中会有一个命名为UserM的结构体,结构体中的字段就是从数据库中的user表中映射而来的。

这样model层的代码就开发完成了,接下来我们来开发store层。

store层代码开发

设计整体store

在开发store层时,我类比了面向对象的思想。

首先,在面向对象的思想中,Go中的结构体就是一个类,对应结构体的方法就是类中的方法。

那么在设计store层时,首先将整个store层看成一个类,通过实例化这个类作为实例对象后可以与数据库进行CURD操作。

理解了上面我说的时候就可以明白下面的开发思路了:

  • 首先创建一个结构体,用来实例化成一个实例对象与数据库进行CRUD操作。那么要进行CRUD操作需要什么呢?自然在结构体中要包含一个*gorm.DB对象用于CRUD
  • 接着要创建一个New函数用来实例化对象操作

代码如下:


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值