使用者定义接口,实现者实现功能

来源: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回答

ccmouse

2020-02-02

一:这个接口使用者还是实现者定义不是绝对的,一般都是双方协商的。最终拍板是强势的一方来拍。这里面没有谁等谁一说,不论定义写在谁这边,都是弱势的团队等强势的团队,弱势跟着强势改。

二:回到语言本身我们认为由使用者定义是有优势的。软件从大了讲要以用户为出发点来实现,小到里面的模块也应该为了其用户来实现。(实现者)模块的用户就是使用这个模块的(使用者)模块。由这个使用者来定义接口是顺着这个宏观思路的结果。

三:这么写没什么问题,不过go语言更推荐的,也是我自己在项目中的写法,这个UserInfoService会写在service.go里面。service.go里面有各种XXXInfoService接口。user_service.go只是实现这个UserInfoService接口。当然这个不是死的,如果UserInfoService团队很强势,或者像你现在这样已经写在它这边了,改起来又麻烦,那就写在user_service.go这边。

0
2
wlxz
综合一下, 以用户为出发点, 各种XXXInfoService接口更推荐写在外面(比如这里的web, api应用)的是吗? user_service.go只负责实现
2020-02-02
共2条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程