当前位置:   article > 正文

Golang:依赖注入与wire

Golang:依赖注入与wire

什么是依赖注入

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

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

  1. type goodsService struct {
  2. db *gorm.DB
  3. }
  4. func NewService() *goodsService {
  5. db := &NewDB()
  6. return &goodsService{db:db}
  7. }
  8. func (g *goodsService) Create(ctx content.Content,goods *model.GoodsM) error {
  9. return g.db.Create(&goods).Error
  10. }

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

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

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

  1. type goodsService struct {
  2. db *gorm.DB
  3. }
  4. func NewService(db *gorm.DB) *goodsService {
  5. return &goodsService{db:db}
  6. }
  7. func (g *goodsService) Create(ctx content.Content,goods *model.GoodsM) error {
  8. return g.db.Create(&goods).Error
  9. }

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

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

  1. ctx := content.Background()
  2. db := NewDB()
  3. service := NewService(db)
  4. service.Create(ctx,goods)

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

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

  1. 方便测试,依赖由外部注入,方便替换依赖项。
  2. 每个对象仅需初始化一次,其他方法都可以服用。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/726666
推荐阅读
相关标签
  

闽ICP备14008679号