使用者定义接口,实现者实现功能
来源:6-5 接口的组合

wlxz
2020-01-31
这个理解起来有点绕,其它的语言如java,都是实现者先实现接口的具体功能,再将接口暴露给使用者。
golang由使用者定义接口:
一、如果是团队合作,岂不是实现者需要先等使用者定义好所需接口?
二、由使用者定义接口的优势到底是什么呢?视频里没听明白,还得麻烦老师再讲解一下,谢谢!
三、另外我将之前写的代码贴一段,这么写是不是有什么问题?
// 这是一段对用户表CRUD的接口代码
// user_service.go
type UserInfoService interface {
GetAll() []models.UserInfo
Get(id int) *models.UserInfo
Delete(id int) error
Update(user *models.UserInfo, columns []string) error
Create(user *models.UserInfo) error
Search(username string) []models.UserInfo
}
// 下面对接口的具体实现
// .....省略
user_service.go里已经定义好了给web框架使用的几个接口,
按视频的讲解,我这么写可能是不对的?
写回答
1回答
-
一:这个接口使用者还是实现者定义不是绝对的,一般都是双方协商的。最终拍板是强势的一方来拍。这里面没有谁等谁一说,不论定义写在谁这边,都是弱势的团队等强势的团队,弱势跟着强势改。
二:回到语言本身我们认为由使用者定义是有优势的。软件从大了讲要以用户为出发点来实现,小到里面的模块也应该为了其用户来实现。(实现者)模块的用户就是使用这个模块的(使用者)模块。由这个使用者来定义接口是顺着这个宏观思路的结果。
三:这么写没什么问题,不过go语言更推荐的,也是我自己在项目中的写法,这个UserInfoService会写在service.go里面。service.go里面有各种XXXInfoService接口。user_service.go只是实现这个UserInfoService接口。当然这个不是死的,如果UserInfoService团队很强势,或者像你现在这样已经写在它这边了,改起来又麻烦,那就写在user_service.go这边。
022020-02-02
相似问题