为了让Go开发变得更简单我把传统多层结构改为准单层(也可以认为两个实则一层,因为有一层框架自己可生成)

前言

自从使用上Go语言我们把开发简单贯彻到底,一个语言是否用得到舒服吗,我们一方面是看语言本身,另一方面还得有个好用框架,我们开发项目一般是不会从零开始编写代码,都是找个框架,在框架基础上搭建自己业务。所以我们一直想有一个满足开发简单、维护简单、学习简单、性能优秀、安全保障的框架,全网搜索没有找到合意框架,经过7年积累,自己戳一个,目前使用已经满足快速开发外包项目要求了,新老程序员交接成本也很低。本文我们一起分享一下我们这赖人搭建的框架。

框架设计思路

我们包传统常见的表现层(Controller),业务逻辑层(Service),和数据访问层(DAO),压缩为仅1层即业务逻辑层,简称接口实现层。但我们框架是存在Controller层的,但开发时我们不会去写Controller层,Controller框架作为约束规则会自己生产,我们仅编写当前请求操作接口代码即可。

结构如下:

├── app                       # 应用目录
│   ├── douyinapp             # 抖音应用模块
│   │   ├── home              # 应用首页数据
│   │   ├── user              #抖音用户相关业务接口
│   │   └── controller.go    # 模块控制器-仅针对douyinapp控制
│   └── controller.go        # 总应用控制器

 其中controller.go是控制,它控制使用模块,及模块控制它控制模块下的业务类使用。

控制层

1.主控控制代码如下,它是负责控制模块引入,也就是那个模块使用就在import引入,不用就去掉。

package controller

/**
* app路由引入口《引入模块控制器》
*
* 请把您使用包用 _ "gofly/app/xx"导入您编写的包 自动生成路由
* 不需要使用的模块则注释掉 例如home模块暂时用不到就注释掉,这样不占用资源,使用是取消注释即可。
* 路由规则:包路径“business/article” + 包中结构体“Cate”转小写+方法名(首字母转小写_ "gofly/app/business"
* 有控制的模块请在RouterHandler添加模块的路由钩子
 */
import (
	"gofly/app/douyinapp"
	"gofly/utils/gf"
)

// 路由中间件/路由钩子
func RouterHandler(c *gf.GinCtx) {
	douyinapp.RouterHandler(c, gf.IsModelPath(c.FullPath(), "douyinapp"))
}

2.模块控制器代码如下,它是负责控制业务类引入,也就是那个业务类使用就在import引入,不用就去掉。

package douyinapp

/**
* 引入控制器
* 请把您使用包用 _ "gofly/app/home/XX"导入您编写的包 自动生成路由
* 不是使用则注释掉
* 路由规则:包路径“home/article” + 包中结构体“Cate”转小写+方法名
 */
import (
	_ "gofly/app/douyinapp/home"
	_ "gofly/app/douyinapp/user"
	"gofly/utils/gf"
)

// 路由中间件/路由钩子,可以从c获取请求各种参数
func RouterHandler(c *gf.GinCtx, IsCtr bool) {
	if IsCtr {
		c.Next()
	}
}

接口实现层(业务逻辑层)代码实现

我们在接口实现层中编写,业务代码,在开发时我们只关心接口层,其他框架帮大家生成或自动引入无需人为编写,我们仅仅编写接口实现层代码,下面演示接口实现层代码编写步骤:

如下图,是home接口实现层代码,我们开发时就在douyinapp模块目录下添加业务类目录,然后在douyinapp目录的controller.go控制器import业务类,代码生成会自动引入。手动添加要自己用途一下。

288e995c80574fce93b7c7cac8c9e31d.png

 1.添加业务类目录

如上图我们在douyinapp模块创建首页home类,我们直接创建名称为home文件夹即可

2.创建接口文件

创建接口有两种一种是接口忽略文件层路由则命名为index.go,生成路由/douyinapp/接口名。另一个是用文件名作为一层路由名称则命名:文件(字母或者字母+数字).go,这样生成路由为 /douyinapp/文件名/接口名。

以一种为例,我们创建index.go文件,添加一个获取首页轮播图数据,代码如下:

package home

import "gofly/utils/gf"

/**
* 首页功能接口
 */
type Index struct{}

func init() {
	fpath := Index{}
	gf.Register(&fpath, fpath)
}

// 获取Swipe轮播数据
func (api *Index) GetSwipe(c *gf.GinCtx) {
	list := gf.List{gf.Map{"name": "第一页", "image": "https://weui.shanliwawa.top/weui/images/1.jpg"}, gf.Map{"name": "第2页", "image": "https://weui.shanliwawa.top/weui/images/2.jpg"}}
	gf.Success().SetMsg("获取Swipe轮播数据").SetData(list).Regin(c)
}

这样我们就编写好一个getSwipe接口,请求路由为:/douyinapp/home/getSwipe,如下图是框架自动生成路由,在终端打印日志。

ba709cd9883248d1bf976ecf818e0ac4.png

 总结

 从上面我们可以看出编写一个接口很简单,代码很少,开发是我们也只关心业务接口,不用去几个文件编写代码,需要多个文件跳来跳去的。

如果你需要数据库操作,参考如下代码,直接在接口层编写,不用再写model层。


// 更新状态
func (api *Product) UpStatus(c *gf.GinCtx) {
	param, _ := gf.RequestParam(c)
	res2, err := gf.Model("createcode_product").Where("id", param["id"]).Data(gf.Map{"status": param["status"]}).Update()
	if err != nil {
		gf.Failed().SetMsg("更新失败!").SetData(err).Regin(c)
	} else {
		msg := "更新成功!"
		if res2 == nil {
			msg = "暂无数据更新"
		}
		gf.Success().SetMsg(msg).SetData(res2).Regin(c)
	}
}

// 删除
func (api *Product) Del(c *gf.GinCtx) {
	param, _ := gf.RequestParam(c)
	res2, err := gf.Model("createcode_product").WhereIn("id", param["ids"]).Delete()
	if err != nil {
		gf.Failed().SetMsg("删除失败").SetData(err).Regin(c)
	} else {
		gf.Success().SetMsg("删除成功!").SetData(res2).Regin(c)
	}
}

// 获取内容
func (api *Product) GetContent(c *gf.GinCtx) {
	id := c.DefaultQuery("id", "")
	if id == "" {
		gf.Failed().SetMsg("请传参数id").Regin(c)
	} else {
		data, err := gf.Model("createcode_product").Where("id", id).Find()
		if err != nil {
			gf.Failed().SetMsg("获取内容失败").SetData(err).Regin(c)
		} else {
			if data != nil && data["workerway"].String() != "" {
				data["workerway"] = gf.VarNew(gf.SplitAndStr(data["workerway"].String(), ","))
			}
			gf.Success().SetMsg("获取内容成功!").SetData(data).Regin(c)
		}
	}
}

感兴趣的朋友前往社区获取代码,有开源免费版和企业版根据情况自行选择:

GoFly全栈开发社区-Go快速开发后台系统框架go全栈开发社区做完整项目开发框架并指导开发者开发项目,为企业和个人提供Go快速开发框,Go开发后台框架,golang后台管理框架,Gin开发API框架,go前后端分离框架,使用GoFly快速框架企业可以节省开发成本,开发者可快速可发项目、扩展强,对开发者者友好,学生或者从别的语言转Go初学者可以轻松上手,框架可帮助开发者快速构建高效、可靠、安全的应用。https://goflys.cn/home

 

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值