Skip to content
面向接口编程
  在编码过程中功能边界之间使用接口进行交互!!!
  • 示例
go
// 在消费方代码中定义接口
package service

type UserStorage interface {
    GetUser(id int) (*User, error)
    SaveUser(user *User) error
}

type UserService struct {
    storage UserStorage
}

func NewUserService(storage UserStorage) *UserService {
    return &UserService{storage: storage}
}

// 具体实现在其他地方
package mysql

type UserRepository struct {
    db *sql.DB
}

func (r *UserRepository) GetUser(id int) (*User, error) {
    // 具体实现
}

func (r *UserRepository) SaveUser(user *User) error {
    // 具体实现
}
/*
优点:
1. 解耦性强,消费方只依赖自己定义的接口
2. 易于测试,可以轻松创建 mock
3. 符合依赖倒置原则
*/

欢迎来到 Laazua 的站点