为什么在 GO 中设计 Dao 层时,总是会设计一个interface的接口
我在看一些别人的框架时,总是发现,他们的Dao层里面会定义一个类似于IDao
的interface
的接口,方法在接口里面定义好后,再实现具体的方法。
可是我直接使用Dao这个结构体里面的方法,也是可以的啊,例如:
var Dao = dao.Dao{}
func (d *Dao) QueryUsernameFindUser(username string) (*models.AdminUser, error) {
}
// 使用时
Dao.QueryUsernameFindUser(req.Username)
所以我就疑惑这样设计的好处是什么?
这个跟语言无关,这是一种经久不衰很经典的设计模式。这主要是为了解耦实例与实例之间的依赖,抽象一层接口出来,可以让我们去依赖抽象,减少耦合。减少耦合的目的主要有两个,一个是工程化,二一个是可以达到在运行时更换实例的目的。