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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Geek大侠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值