golang单一职责原则接口设计例子
golang单一职责原则接口设计
理解:按照职责的方式划分接口,就跟权限管理中,以角色进行分配权限一样
(虽然golang比较偏向于面向过程的语言,但是因为涉及接口的概念,感觉这个接口设计同样使用于golang的接口设计)
package main
import (
// "errors"
"log"
)
// IUserBo 只负责用户属性的接口
type IUserBo interface{
// 获取用户的Id
GetUserID()
// 获取用户密码
GetUserPW()
}
// IUserBiz 只负责用户信息的维护接口
type IUserBiz interface{
// 添加用户
AddUser()
// 删除用户
RemoveUser()
}
// User 用户属性
type User struct{
ID string
PW string
}
// Users 管理用户
var Users = make([]*User,0)
// GetUserID 获取用户ID
func(u *User)GetUserID(){
log.Println(u.ID)
}
// GetUserPW 获取用户的密码
func(u *User)GetUserPW(){
log.Println(u.PW)
}
// AddUser 添加用户
func(u *User)AddUser(){
for _,v := range Users{
if u.ID == v.ID{
log.Println("该用户已经存在")
return
}
}
Users = append(Users,u)
}
// RemoveUser 删除用户
func (u *User)RemoveUser(){
for i:=0;i<len(Users);i++{
if(Users[i].ID==u.ID){
// golang的数组删除元素就是这么的简单
Users = append(Users[:i],Users[i+1:]...)
}
}
log.Println(Users)
}
func init(){
log.SetFlags(log.Ldate|log.Lshortfile)
u1 := &User{"1","11"}
u2 := &User{"2","12"}
u3 := &User{"3","13"}
u4 := &User{"4","14"}
u5 := &User{"5","15"}
Users = append(Users,u1,u2,u3,u4,u5)
}
func main(){
var iso IUserBo
var isz IUserBiz
u := &User{"1","11"}
iso = u
iso.GetUserID()
iso.GetUserPW()
isz = u
isz.AddUser()
isz.RemoveUser()
}