我正在使用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
角色可以是用户、经理或管理员。一个项目可以有多个用户(角色' user‘的多个用户和角色’manager‘的一个用户)。
此REST API (JSON)需求的使用者是每个项目(所有用户)的项目列表(GET),每个项目的名称为所有用户(用户名,而不是userId)。如果用户是经理,则不重要)。他们还希望能够向项目中添加新用户(PUT)。还要创建新项目(POST)。对于所有的请求,JSON请求/响应应该包含用户名),我真的在寻找如何继续进行的建议。
为了熟悉Grails/REST,我定义了三个域(项目、用户和角色),并将JSON分别获取和发布到这些域中(不是域关系)。
然后玩领域关系,我尝试了‘db-反向工程’插件,它给出了以下领域的关系。
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 & REST,所以请耐心接受我的基本问题。
发布于 2014-06-21 02:43:41
Grails开发的一般策略是一种简单的MVC模式,在这种模式下,您可以使用控制器构建模型并将其传递给视图。对于REST API,您实际上不需要视图,除非您需要更改域对象的默认显示方式。您将需要为您的请求配置一些映射,这将在here中讨论REST。除此之外,如果在基本crud操作之外的任何业务逻辑中需要控制器和服务,则只需要一个控制器和一个服务。对于你的域层,有几个建议:
1)通常情况下,域类和DB表都是单数的,这样就可以避免使用用户名等名称。所以我会让你的表User,Role和Project。
2)您与您的用户和项目之间存在多对多关系,因此您需要指定这一点。您可以在映射中使用joinTable来实现这一点,但是如果您经常查询关系,则可能需要为ProjectUser创建一个单独的域类,因为如果您不小心,就会遇到hibernate n+1问题。
希望这能有所帮助,
发布于 2014-06-21 02:53:57
Grails默认使用Hibernate与您正在使用的任何数据库进行交互。它们与Hibernate的接口称为GORM (Grails对象关系映射)。这是一种强大的方法,可以将对象映射到DB,而不必纠结于DB视图、存储过程等。默认情况下,Grails甚至会为您构建这些表。Grails最擅长的就是基本的CRUD (创建、读取、更新和删除)操作。我建议您阅读Grails user guide (特别是section on domain modeling),以便更好地了解Grails的好处。
注意:如果我听起来像是一个shill,我将断然声明Grails是相当不成熟的,并且肯定有缺陷。它恰好是快速和简单的CRUD正是它所擅长的。
https://stackoverflow.com/questions/24333046
复制相似问题