假设我有10个grails服务。这些服务中的每一个都将调用REST服务。因此,我想封装REST代码,以便10个服务可以轻松地重用它。
在考虑选项时,我可以:
1)使用REST相关代码创建另一个服务或bean,并将其注入10个服务中的每一个 2)创建一个包含REST代码的超类服务,并让所有10个grails服务扩展此类。
我正在尝试使用选项2,但遇到了依赖注入超类的问题。
示例:
class SuperService {
def aString
}
class ExampleService extends SuperService {
}
resources.groovy:
beans = {
superService(SuperService) {
aString = "something"
}
exampleService(ExampleService) {
}
}
当我在运行集成测试时在调试器中运行它时,我看到aString的值为null。显然,这对我来说会有问题。
正如您所料,使用以下resources.groovy运行相同的代码:
beans = {
superService(SuperService) {
}
exampleService(ExampleService) {
aString = "something"
}
}
和aString =“某事”。
所以,我更喜欢选项2,因为它将减少配置布线,但我认为这不是可行的方法。换句话说,如果我必须在每个子类中设置aString,那就没有价值。
思想?
我错过了什么吗?
我也对其他选项持开放态度。
提前致谢, 托德
答案 0 :(得分:0)
对于DRY而言,您对选项#2有正确的想法 - 但它实际上只是一行。如果与superService对象唯一的共同点是服务,而没有其他方法,那么你真的不能保存自己的任何工作。如果有的话,只是为依赖注入声明一个超类会使事情更隐蔽,并且可能更难维护。
这听起来像你提议将REST方法放在superService中,所以不确定为什么你关注依赖注入superService - 你希望你的方法执行REST交互,子类就可以了打电话。或者您是否尝试了选项1和2的组合?