如何在Grails服务中将接口与实现分开?

Mul*_*one 15 service grails groovy interface

我想知道是否有可能在Grails上创建一个服务接口,我找不到合适的方法.这种解释并不令人满意,因为它似乎混合了Java和Groovy:

http://www.grails.org/doc/latest/guide/8.%20The%20Service%20Layer.html

在我看来,这是一个糟糕的框架设计缺陷,因为接口机制是Java(和大多数OO语言)的最佳功能之一.

有什么想澄清这个问题吗?

谢谢!Mulone

小智 18

你可以有一个界面,但实际上你不需要一个界面.如果我理解正确,您希望有两个服务实现,并能够选择使用哪个.

简单地实现一个名为例如两个服务MyService1MyService2,然后grails-app/conf/spring/resource.groovy你可以指定:

beans = {
    ... 
    // syntax is beanId(implementingClassName) { properties }
    myService(MyService1)
    ...
}
Run Code Online (Sandbox Code Playgroud)

甚至:

beans = {
    ...
    if (someConfigurationOption) {
        myService(MyService1)
    } else {
        myService(MyService2)
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是你如何告诉Spring实际注入哪些服务myService.现在你可以使用myService如下:

public MyController {
    def myService
    ...
}
Run Code Online (Sandbox Code Playgroud)

和Spring将自动连接正确的实现.这允许您根据某些配置配置要使用的服务实现.


Dón*_*nal 5

  • com.mycompany.mypackage.MyInterface.groovy存储的类中定义服务接口under src/groovy
  • 定义存储在下的服务实现 grails-app/services

    class MyService implements MyInterface {
        // service implementation goes here
    }
    
    Run Code Online (Sandbox Code Playgroud)