Gin项目实战04-业务层代码注入到api层

上一篇博客 留下了一个悬念,这篇我们就来解决它。
话不多说直接上代码


handler 目录 uaa.go 的代码 改动如下 
 

package handler

import (
	"golang.org/x/net/context"
)

type UaaHandler interface {
	Login(ctx context.Context, req *LoginReq, rsp *LoginRsp) error
}

type uaa struct {
}

func newUaaHandler() UaaHandler {
	return &uaa{}
}

type LoginReq struct{}

type LoginRsp struct {
	Id   string `json:"id"`
	Name string `json:"name"`
}

func (u *uaa) Login(ctx context.Context, req *LoginReq, rsp *LoginRsp) error {
	rsp.Id, rsp.Name = "1", "小明"
	return nil
}

 handle 目录下 新建 app.go ,代码如下

package handler

type App struct {
	Uaa UaaHandler
}

func NewApp() *App {
	return &App{Uaa: newUaaHandler()}
}

router 目录下 router.go 代码如下

package router

import (
	"ginWeb/handler"
	"github.com/gin-gonic/gin"
)

func InitRoutes(app *handler.App) *gin.Engine {
	router := gin.New()
	root := router.Group("/gin-web")
	v1 := root.Group("v1")
	uaa := &uaa{app.Uaa}
	uaa.addRouter(v1)
	return router
}

main.go 代码改动如下

package main

import (
	"ginWeb/handler"
	router2 "ginWeb/router"
	"log"
	"net/http"
)

func main() {
	router := router2.InitRoutes(handler.NewApp())
	srv := &http.Server{
		Addr:    ":8080",
		Handler: router,
	}

	if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
		log.Fatalf("listen: %s\n", err)
	}
}

然后运行 go run main.go 
执行 curl -XPOST http://127.0.0.1:8080/gin-web/v1/uaa/login
会出现 {"id":"1","name":"小明"}% 表示成功

小结一下
      上述代码用通过注入的方式 将业务层模型注入到 api层,这样api不需要显示的去New 新的业务层模型,业务层的模型 也不需要提供显示的New方法,调用上更加安全
       依赖注入(Dependency Injection,DI)是一种软件设计模式,用于实现松耦合(Loose Coupling)的组件之间的关系。在依赖注入中,组件之间的依赖关系不是在组件内部硬编码实现的,而是通过外部传入的方式进行注入,从而使得组件更容易被替换、扩展和测试。

依赖注入的实现可以通过构造函数注入、接口注入、属性注入等方式。通过依赖注入,可以将组件之间的依赖关系外部化,在需要替换具体实现或者进行单元测试时更加便捷。

在软件开发中,依赖注入有助于降低组件之间的耦合度,提高代码的灵活性、可维护性和可测试性。通过依赖注入,可以更方便地管理组件之间的依赖关系,提高代码的可读性和可维护性。
      配置文件、日志处理下篇见,如果觉得有帮助请务必继续学下去

创作不易,喜欢的请一键三连,转载请注明出处,侵权必究 

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
gin-admin-api是一个基于Gin框架开发的后台管理系统的API接口。Gin框架是一个轻量级的、高性能的Go语言框架,具有路由和中间件的功能,适合用于构建Web应用程序。 gin-admin-api提供了一套完善的API接口,用于实现后台管理系统的各种功能,例如用户管理、角色管理、权限管理、菜单管理、日志管理等。通过这些接口,可以方便地进行用户的注册、登录和认证,管理用户的角色和权限,管理系统的菜单和日志信息。 gin-admin-api的优点之一是高性能。由于采用了Gin框架,它具有快速的路由匹配和中间件处理的能力,能够处理大量的请求,并在高并发的情况下保持稳定性和可靠性。 另一个优点是易于扩展和定制。gin-admin-api使用了模块化的设计,各个功能模块之间松耦合,可以根据实际需求进行灵活的扩展和定制。例如,可以根据业务需求添加新的功能模块,或者修改和优化已有的模块。 此外,gin-admin-api还提供了友好的文档和示例代码,方便开发者理解和使用。它的源代码也是开源的,可以在GitHub上找到,这样可以方便地进行二次开发和定制,满足特定的业务需求。 总之,gin-admin-api是一个功能丰富、高性能、易扩展的后台管理系统API接口,大大简化了后台管理系统的开发工作,帮助开发者快速构建稳定、可靠的后台管理系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Geek大侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值