繁体   English   中英

Grails:如何跨其他域“访问”域类实例变量?

[英]Grails: how to “access” a domain class instance variables across other domains?

抱歉,对于这个问题,我无法拿出更好的标题,但是我尽了全力。 我有域类UserPost -一个user有多个posts ,并且一个post属于一个用户,如下所示。

class User {

    String name

    static hasMany = [ posts : Post ]

    static constraints = {  }
}

class Post {

    String content

    static belongsTo = [ user : User ]

    static constraints = {  }
}

我还有另一个域类Status ,如下所示。

class Status {
    Boolean isActive

    static constraints = {
    }
}

每个userpost都有一个status ,我想知道如何实现它? 我可以想到的几种不同方法是:

  1. 继承:让UserPost扩展Status ,并在Status使用static mapping = { tablePerHierarchy false } 然后, UserPost自动继承Status的实例变量(它们将保留在单独的表中)。 但是,这种方法似乎不合适,因为UserPost实际上不是Status
  2. 我可以重新定义Status的实例变量UserPost ,然后做这样的事情在UserPost
static constraints = {
        importFrom Status

        // other constraints 
    }

问题:

  • 一种方法比另一种更好吗?
  • 有没有更好的方法来实现这一目标?
  • 有Grails专业人士可以推荐的最佳做法吗?

注意: Status域有许多实例变量(此处提供的是精简版本),我需要从许多其他域( UserPost和许多其他域)“访问”其实例变量。 否则,我可能刚开始使用Status域,而只是在UserPost分别定义那些实例变量。 上面提到的方法2可以做到这一点,除了它只使用importFrom Status节省了重新键入约束的时间。

我同意继承不是一个干净的选择。 您的第二种方法似乎正确,但是为什么需要“ importFrom”? 通过将Status定义为User and Post中的实例变量,Status将负责验证其自己的变量。 您仍然可以像这样从Post / User访问Status'实例变量:

user.status.isActive

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM