请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

这个理解起来有点绕,其它的语言如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 16:28:41

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

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

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

0 回复 有任何疑惑可以回复我~
  • 提问者 wlxz #1
    感谢!,这个回复非常棒!
    回复 有任何疑惑可以回复我~ 2020-02-02 18:10:43
  • 提问者 wlxz #2
    综合一下,
    以用户为出发点,
    各种XXXInfoService接口更推荐写在外面(比如这里的web, api应用)的是吗?
    user_service.go只负责实现
    回复 有任何疑惑可以回复我~ 2020-02-02 18:18:16
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信