众所周知,服务(控制器/用例)层用于处理业务逻辑,存储库用于处理数据库查询
现在我有:
func (s *OrderService) Create(order models.Order) (models.Order, error) {
...
user := models.User{
Contact: order.Address.Contact,
}
createdUser, err := s.UserRepo.Save(user)
// err handling...
order.User = user
createdOrder, err := s.OrderRepo.save(order)
// err handling...
return order, nil
}
// user_repo.go
func (repo *UserRepo) Save(user models.User) (models.User, error) {
err := repo.DB.Debug().Save(&user).Error
// err handing...
return user, nil
}
// order_repo.go
func (repo *OrderRepo) Save(order models.Order) (models.Order, error) {
err := repo.DB.Debug().Save(&order).Error
// err handing...
return order, nil
}
我希望应用 gorm 事务变得更加灵活,而不是我目前的代码太静态。所以我应该删除血腥。数据库存储库,但db.Begin()
i. 在乡间路过。DB通过参数??
tx := s.DB.Begin()
createdUser, err := s.UserRepo.Save(user, tx)
ii.或直接在服务层运行查询??(但它打破了ddd的设计理念)
tx := s.DB.Begin()
createdUser, err := tx.Create(&user)
if err != nil {
tx.Rollback()
}
createdOrder, err := tx.Create(&order)
if err != nil {
tx.Rollback()
}
tx.Commit()
幕布斯7119047
慕雪6442864
相关分类