我正在使用Grails 2.4并使用提供REST API。我正在寻找有关域/实体创建的建议。
我有4个简单的表格:
1) projects:
projectId (auto-increment, PK)
name
description
(some other fields but not important for my question I guess)
2) users:
userId (auto-increment, PK)
roleId (FK->roles/roleId)
username
(some other fields but not important for my question I guess)
3) project_users (join table for projects & users):
projectId FK->projects/projectId)
userId (FK->users/userId)
4) roles:
roleId (auto-increment, PK)
name
角色可以是用户,经理或管理员。一个项目可以有很多用户(角色'用户'以及1个角色'经理')的多个用户。
此REST API(JSON)需求的使用者是项目的列表(GET),其中包含每个项目的所有用户名称(用户名不是userId)(所有用户......如果用户不是经理,则无关紧要)。他们还希望能够将新用户(PUT)添加到项目中。还要创建新项目(POST)。对于所有请求,JSON请求/响应应包含用户名)我真的在寻找有关如何继续的建议。
为了熟悉Grails / REST,我定义了3个域(项目,用户和角色)和GET&单独POST JSON到这些域正常工作(没有域关系完成)。
然后为了发挥域名关系,我尝试了db-reverse-engineer'插件,它给了以下域名的关系。
class Projects {
String name
String description
static hasMany = [userses: Users]
static mapping = {
id column: "project_id"
version false
}
static constraints = {
name unique: true
description nullable: true
}
}
class Users {
String username
Roles roles
static hasMany = [projectses: Projects]
static belongsTo = [Roles]
static mapping = {
id column: "user_id"
version false
}
static constraints = {
username maxSize: 32, unique: true
}
}
class Roles {
String name
static hasMany = [userses: Users]
static mapping = {
id column: "role_id", generator: "assigned"
version false
}
static constraints = {
name maxSize: 16, unique: true
}
}
现在我不确定如何继续下去。我是否需要创建数据库视图(db不允许更新查看)&相应的控制器和保存写自定义代码。只有几天我和Grails& amp; REST,请耐心等待基本问题。
答案 0 :(得分:0)
Grails开发的一般策略是一个简单的MVC模式,您可以使用控制器构建模型并将其传递给视图。对于REST API,您实际上不需要视图,除非您需要更改域对象的默认显示方式。您需要为请求配置一些映射,以便讨论REST API here。除此之外,如果您需要超出基本crud操作的任何业务逻辑,您只需要一个控制器和一个服务。至于你的域层,有几点建议:
1)通常有域类和数据库表是重要的,所以你不必拥有像用户这样的名字等等。所以我会让你的表用户,角色和项目。
2)您与用户和项目之间存在多对多关系,因此您需要指定该关系。您可以在映射中使用joinTable执行此操作,但如果您要查询关系很多,则可能需要为ProjectUser创建单独的域类,因为如果您不小心,则会遇到hibernate n + 1问题。
希望有所帮助,
答案 1 :(得分:0)
Grails默认使用Hibernate与您正在使用的任何数据库进行交互。它们与Hibernate的接口称为GORM(Grails对象关系映射)。这是一种将对象映射到数据库的强大方法,而不必使用数据库视图,存储过程等。默认情况下,Grails甚至会为您构建表格。基本的CRUD(创建,读取,更新和删除)操作正是Grails开箱即用的好处。我建议您阅读Grails user guide(特别是section on domain modeling),以便更好地了解Grails的优势。
注意:如果我听起来像一个shill,我将不分类地说Grails很不成熟并且肯定有缺陷。事实恰恰相反,快速简单的CRUD正是它擅长的。