Golang:依赖注入与wire

什么是依赖注入?

依赖注入(dependency injection,缩写DI)是一种软件设计模型,用于实现类之间的解耦和依赖关系的管理。 它通过将依赖关系的创建和维护责任转移到外部容器中,使得类不需要自己实例化依赖对象,而是由外部容器动态地注入依赖。这种模式有助于减少类之间的直接依赖,提高代码的可维护性、可测试性和可拓展性。依赖注入的实现方式包括构造函数注入、属性注入、接口注入等,每种方式都有其特定的用途和优势。

在Golang编程中我们是如何使用依赖注入设计模型的呢?我们来看一个实例你就理解了。在后开服务开发中我们经常做连接数据库进行CURD。Go大部分是使用GORM来操作数据库,所以我们的service依赖*gorm.DB,代码如下:

type goodsService struct {
    db *gorm.DB
}

func NewService() *goodsService {
    db := &NewDB()
    return &goodsService{db:db}
}

func (g *goodsService) Create(ctx content.Content,goods *model.GoodsM) error {
    return g.db.Create(&goods).Error
}

这一段代码是用来创建商品属性的,我们可以按照如下方法来创建商品属性:

ctx := content.Background()
service := NewService()
service.Create(ctx,goods)

为了更好的解耦我们来修改一下代码:

type goodsService struct {
    db *gorm.DB
}

func NewService(db *gorm.DB) *goodsService {
    return &goodsService{db:db}
}

func (g *goodsService) Create(ctx content.Content,goods *model.GoodsM) error {
    return g.db.Create(&goods).Error
}

修改后代码,我们把db的初始化放到了NewService的外面,在调用NewService的时候将其通过传参的方式传递过来。

现在,我们创建商品的使用方式如下:

ctx := content.Background()
db := NewDB()
service := NewService(db)
service.Create(ctx,goods)

这种解耦后的调用方式是不是很熟悉,没错 这就是我们所说的的依赖注入设计模式。我们在构造service的时候依赖*gorm.DB,而现在我们将它的依赖对象*gorm.DB通过函数参数的形式注入进来,这种方式就是依赖注入

在Golang只使用依赖注入的核心目的,其实就是为了解耦代码。这样做的主要好处是:

  1. 方便测试,依赖由外部注入,方便替换依赖项。
  2. 每个对象仅需初始化一次,其他方法都可以服用。
  • 33
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LCS-312

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

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

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

打赏作者

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

抵扣说明:

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

余额充值