Grails中的领域建模如何受领域属性影响?
问题描述:
可以说我在我的Grails应用程序中有一个名为Tag
的域类。Grails中的领域建模如何受领域属性影响?
class Tag {
String name // line number 1
User user // Line number 2
static constraints = {
}
static belongsTo = [User, Post]
}
我创建与belongsTo
关键字的帮助User
和Tag
之间的关系。但我对line number 2
有疑问,这是User user
。现在将此代码放置在我的Tag
类中会以任何方式影响Tag
和User
之间的关系,或者只关系belongsTo
关键字中提供的内容。
还有什么工具可以可视化 Grails应用程序中任何类之间的关系?
答
belongsTo
与几个类通常是可疑的,因为它意味着实例将与其他几个域对象构成关系。根据我的经验,只有当你知道其中一个设置为null
时,它才有用(但仍然可以改为TagUser
和TagPost
来代替Tag
类)。我建议你删除belongsTo
(可能是Post)之一。
在您的Post
和User
类中,您可能有hasMany
关系。这足以创建关系,并且不需要必须在Tag
中加上belongsTo
。使用belongsTo
的唯一优点是更新或删除User
或Post
将级联并保存Tags
。
如果您的标记用例是传统标记(例如,stackoverflow上的标记),则尝试创建多对多关系(一个用户具有多个标记,一个标记具有多个用户。您可以在多对多关系中使用belongsTo来指示哪个拥有的关系。阅读the documentation on many-to-many以了解这种关系是如何工作的。
关于你最后的问题,IntelliJ有一个集成的域类依赖关系可视化功能。
所以你的意思是要尽可能地去除'belongsTo'? –
不可以。如果你有一对多关系或一对一关系,并且对象之间具有很强的依赖关系(例如,*删除用户应该删除它的标记*),那么你应该**使用'belongsTo'。看看[GORM gotcha](http://blog.springsource.org/2010/07/02/gorm-gotchas-part-2/)了解'belongsTo'的含义和含义。 – Antoine
感谢您的链接和答案:) –