工程封装设计在GoFrame项目中是非常关键的一部分,它有助于将应用分解为模块,提高代码的可维护性和可读性。以下是一个简单的GoFrame DAO对象封装和工程封装的设计示例:
工程目录结构
your_project/
GoFrame DAO对象封装设计-工程封装设计
|-- app/
| |-- controller/
| | |-- user.go
| |-- dao/
| | |-- user.go
| |-- model/
| | |-- user.go
| |-- service/
| | |-- user.go
| |-- router/
| | |-- router.go
| |-- boot.go
|-- config/
| |-- config.toml
|-- library/
| |-- database/
| | |-- database.go
|-- public/
|-- template/
|-- log/
|-- main.go
数据库配置
在 config/config.toml 文件中配置数据库连接信息:
[database]
link = "root:password@tcp(127.0.0.1:3306)/your_database?charset=utf8mb4&parseTime=True&loc=Local"
database包
在 library/database/database.go 文件中封装数据库相关功能:
package database
import (
"github.com/gogf/gf/database/gdb"
"github.com/gogf/gf/frame/g"
)
var db gdb.DB
func init() {
link := g.Cfg().GetString("database.link")
db = g.DB("mysql", link)
}
func DB() gdb.DB {
return db
}
DAO对象
在 app/dao/user.go 文件中封装UserDAO:
package dao
import (
"your_project/library/database"
"your_project/app/model"
)
type UserDAO struct{}
var UserDAOInstance = new(UserDAO)
func (dao *UserDAO) GetUserInfo(userId int) (*model.User, error) {
user := new(model.User)
_, err := database.DB().Table("user").Where("id=?", userId).Struct(user)
return user, err
}
// 其他数据库操作方法...
服务层
在 app/service/user.go 文件中封装UserService:
package service
import (
"your_project/app/dao"
"your_project/app/model"
)
type UserService struct{}
var UserServiceInstance = new(UserService)
func (s *UserService) GetUserInfo(userId int) (*model.User, error) {
return dao.UserDAOInstance.GetUserInfo(userId)
}
// 其他业务逻辑方法...
控制器
在 app/controller/user.go 文件中封装UserController:
package controller
import (
"github.com/gogf/gf/net/ghttp"
"your_project/app/service"
)
type UserController struct{}
var UserControllerInstance = new(UserController)
func init() {
ghttp.Get("/user/info", UserControllerInstance.GetUserInfo)
}
func (c *UserController) GetUserInfo(r *ghttp.Request) {
userId := r.GetInt("user_id")
userInfo, err := service.UserServiceInstance.GetUserInfo(userId)
if err != nil {
r.Response.WriteJsonExit(g.Map{"error": err.Error()})
}
r.Response.WriteJson(userInfo)
}
// 其他控制器方法...
路由
在 app/router/router.go 文件中配置路由:
package router
import (
"your_project/app/controller"
"github.com/gogf/gf/frame/g"
)
func init() {
s := g.Server()
s.Group("/api", func(group *ghttp.RouterGroup) {
group.Include(&controller.UserController{})
// 其他控制器...
})
}
启动文件
在 boot.go 文件中引导应用程序启动:
package main
import (
"your_project/app/router"
"github.com/gogf/gf/frame/g"
)
func main() {
g.Server().Run()
}
通过这样的结构,你可以更好地组织代码,使得各个模块之间的职责更加清晰,易于维护和扩展。DAO、服务、控制器等层次的分离,以及使用GoFrame的数据库支持和路由配置,都有助于提高项目的整体质量。
转载请注明出处:http://www.zyzy.cn/article/detail/7505/GoFrame