Golang Go语言中gorm与mvc的疑问
Golang Go语言中gorm与mvc的疑问
db.Model(&user).Update(“name”, “hello”)
db.Model(&user).Where(“active = ?”, true).Update(“name”, “hello”)
db.Model(&user).Updates(User{Name: “hello”, Age: 18})
db.Model(&user).Updates(User{Name: “”, Age: 0, Actived: false})
这是 gorm 的官方文档例子,必须得传一个 user 结构体实例过去 所以我 database 包这样封装
package database
import "project/models"
func MachinesUpdate(m *models.Machines) error {
db.Model(&models.Machines{}).Where("SerialNumber = ?", m.SerialNumber).UpdateColumn(
....
因为 Machines 结构体是在 models 里封装,所以db.Model(&models.Machines{})
这个得在 database 里导入 models 包
然后 modesl 包里的 Machines 写 Add 方法
package models
import (
db “project/database”
)
type Machines struct{
…
}
func (m *Machines) Add() {
if err := db.MachinesAdd(m);err != nil {
log.Error(err)
}
}
那么这样就环了,编译报错 models 导入 database,database 导入 models 如何解决 有人说单独搞个包,我想了下,主要是
db.Model(&models.Machines{})
这句一定会导入 models,搞个单独包一导入这个 database 还是一样环: models -> 单独包 -> database -> models
更多关于Golang Go语言中gorm与mvc的疑问的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
个人认为是你的模块划分有问题
你的 dababase 这个包类似一个 dal 层的概念,如果你明确地想要设计一个 dal 层,那你的 Add 这个方法也应该放在 dal 层里,model 是更底层的,底层的方法不应该依赖上层的方法,这种情况下 model 层比较单纯,就做好数据描述的工作。
当然你也可以选择把 MachinesUpdate 下放到 model 层,形成一个功能比较丰富的 model 层(如果你用 python 里的 django 的话,差不多就是这种设计)。
更多关于Golang Go语言中gorm与mvc的疑问的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
从 Java 转 Go 几乎都会遇到的问题,Go 不适合 mvc
不赞同。
gorm 是 jinzhu 大大的作品,然后使用 gorm 最多和最地道的项目是什么呢?个人认为是 jinzhu 所在公司的开源项目 qor
建议楼主去看下 qor 的源码,看看作者本人是怎么用 gorm 的,其实使用的时候还封装了一层,qor 里面叫 Resource,其实自己也可以实现一套类似 Resource 的东西,这样使用 gorm 就爽多了
缺点是使用了很多反射,性能可能不太好
操作数据库可以单独封装
在Golang(Go语言)生态中,GORM和MVC是两个非常重要的概念,但它们分别代表了不同的领域和用途。
GORM是一个强大的Go ORM(对象关系映射)库,它让Go开发者能够以更抽象、更简洁的方式操作数据库。通过GORM,你可以轻松地定义模型、执行查询、更新和删除操作,而无需直接编写复杂的SQL语句。GORM还支持事务、迁移和钩子等功能,非常适合在Go应用中处理数据库相关的工作。
MVC(Model-View-Controller)则是一种软件设计模式,它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。在MVC架构中,模型负责处理数据逻辑,视图负责呈现用户界面,而控制器则负责接收用户输入并调用模型和视图来完成相应的功能。MVC架构有助于提高代码的可维护性、可扩展性和可测试性。
在Go语言的项目中,你可以同时使用GORM和MVC。例如,你可以使用GORM来处理数据库操作,将这部分代码放在模型层;然后使用MVC架构来组织整个应用,使代码结构更加清晰、易于管理。这样,GORM和MVC可以相辅相成,共同提高Go应用的质量和效率。
总之,GORM和MVC在Go语言中都有其独特的地位和作用。它们不是互相排斥的,而是可以相互融合、共同使用的。在实际开发中,你可以根据自己的需求和项目特点来选择合适的技术和架构。