为我在 Grails 中的所有服务提供通用方法的好方法是什么?
What is a good way to provide common methods to all of my services in Grails?
你建议我使用 Inheritance、Mixins、ExpandoMetaClass 还是其他什么?
如果您的常用方法在很大程度上彼此相关,请使用包含它们的通用 class 的继承。
但是,如果您有不同的关注点并且将它们分组到多个文件中会受益,我建议 traits - 他们已弃用 Groovy 的 @Mixin
注释。
我用它们来装饰我的控制器,效果非常好。我在某处读到 Grails 团队也将使用它们来替换 'magic' metaclass 控制器等人工制品的装饰(这就是目前提供 render
等方法的方式)。找不到 link,但是 :(
如果您想将此行为添加到应用程序中的服务以及来自插件的服务中,请使用 GrailsApplication
中的 getServiceClasses()
动态方法并添加到它们的元类中,例如
def grailsApplication
....
grailsApplication.serviceClasses.each { sc ->
sc.clazz.metaClass.foo = { bar -> ... }
}
你建议我使用 Inheritance、Mixins、ExpandoMetaClass 还是其他什么?
如果您的常用方法在很大程度上彼此相关,请使用包含它们的通用 class 的继承。
但是,如果您有不同的关注点并且将它们分组到多个文件中会受益,我建议 traits - 他们已弃用 Groovy 的 @Mixin
注释。
我用它们来装饰我的控制器,效果非常好。我在某处读到 Grails 团队也将使用它们来替换 'magic' metaclass 控制器等人工制品的装饰(这就是目前提供 render
等方法的方式)。找不到 link,但是 :(
如果您想将此行为添加到应用程序中的服务以及来自插件的服务中,请使用 GrailsApplication
中的 getServiceClasses()
动态方法并添加到它们的元类中,例如
def grailsApplication
....
grailsApplication.serviceClasses.each { sc ->
sc.clazz.metaClass.foo = { bar -> ... }
}