请问下大家,以下两种代码,哪一种更合适,分别有什么优缺点?
个人觉得第一种代码量多 而且有一个空的结构体 意义呢?
哪一种使用的更广泛一些?
个人觉得 第一种方式类似有点像c#的味道 NewUserLogic
类似于构造方法 返回的是实例化后的对象 之后通过对象去访问对象的方法!!!
第二种类似于js的函数式编程 一个函数调用另一个函数
所以有点懵逼 到底哪种合适 哪种好一点!!!
第一种: 使用结构体
type UserLogic struct {}
type ProductLogic struct {}
func NewUserLogic ()*UserLogic {
return New(UserLogic)
}
func NewProductLogic () *ProductLogic{
return New(ProductLogic)
}
func (*UserLgic ) GetUserById(id int64) (model.User,error) {
// 逻辑代码
}
func (*ProductLogic) GetProductById(id int64) (model.Product,error) {
// 逻辑代码
}
// 调用
user,err :=logic.NewUserLogic().GetUserById(1)
product,err :=logic.NewProductLogic().GetProductById(1)
第二种 直接定义直接调用
func GetUserById(id int64) (model.User,error) {
// 逻辑代码
}
func GetProductById(id int64) (model.Product,error) {
// 逻辑代码
}
// 调用
user,err :=logic.GetUserById(1)
product,err :=logic.GetProductById(1)
第一种方法中的结构体更多的是起到命名空间的作用。代码量小的时候当然是第二种方法更简单。如果代码量很多,这种全局的函数很容易产生命名冲突。而且go语言中,第一种方法GetUserById和GetProductById一般将User和Product省略。因为
UserLogic
本身就表示对User的操作了,除了是例外的情况。并且Get
方法中的Get
一般也是省略的,所以方法名可以简化为ById
。