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. 每个对象仅需初始化一次,其他方法都可以服用。

你可能感兴趣的:(golang,开发语言,后端)