编写GO的WEB开发框架 (九): Dao和Service
时间: 2024-03-02 09:48:25 浏览: 16
在 Go 的 web 开发中,Dao 和 Service 是两个非常重要的概念。
Dao(Data Access Object)是数据访问对象,它主要负责与数据库进行交互,完成数据的增删改查等操作。
Service 则是业务逻辑层,它对外提供服务,调用 Dao 层提供的接口进行数据操作,并对数据进行处理和转换,最终返回给 Controller 层。
下面是一个简单的示例代码,演示如何在 Go 中实现 Dao 和 Service:
```
// 定义 Dao 接口
type UserDao interface {
GetUserById(id int) (*User, error)
}
// 实现 UserDao 接口
type UserDaoImpl struct {
db *sql.DB
}
func NewUserDaoImpl(db *sql.DB) *UserDaoImpl {
return &UserDaoImpl{db: db}
}
func (dao *UserDaoImpl) GetUserById(id int) (*User, error) {
user := &User{}
err := dao.db.QueryRow("select id, name from user where id = ?", id).Scan(&user.Id, &user.Name)
if err != nil {
return nil, err
}
return user, nil
}
// 定义 Service 接口
type UserService interface {
GetUserById(id int) (*UserDto, error)
}
// 实现 Service 接口
type UserServiceImpl struct {
userDao UserDao
}
func NewUserServiceImpl(userDao UserDao) *UserServiceImpl {
return &UserServiceImpl{userDao: userDao}
}
func (service *UserServiceImpl) GetUserById(id int) (*UserDto, error) {
user, err := service.userDao.GetUserById(id)
if err != nil {
return nil, err
}
return &UserDto{Id: user.Id, Name: user.Name}, nil
}
```
在上面的代码中,我们首先定义了一个 UserDao 接口,以及它的实现 UserDaoImpl。然后我们定义了一个 UserService 接口,以及它的实现 UserServiceImpl。在 UserServiceImpl 的实现中,我们注入了一个 UserDao 对象,以便在调用 GetUserById 方法时,可以通过 UserDao 对象访问数据库。
在实际应用中,我们可以使用依赖注入(DI)框架来自动注入依赖对象,从而避免手动创建对象和注入依赖的繁琐工作。常用的 DI 框架包括 Go Spring、Wire 等。