2011-06-21 17 views
8

Estoy a punto de comenzar un proyecto de aplicación web social.Interfaces en Groovy

Mientras diseñaba clases, decidí definir interfaces como "commentable" o "simpático" para usarlas cuando fuera necesario.

Sin embargo, no pude entender cómo implementarlo en Groovy, que estoy en la fase de aprendizaje.

El ejemplo siguiente es de la documentación maravilloso,

interface X 
{ void f(); void g(int n); void h(String s, int n); } 

x = [ f: {println "f called"} ] as X 
x.f() 
//x.g() // NPE here 

decir que es uno de mis interfaces y Quiero usar una clase llamada B para implementar esta interfaz ..

deberá acabo decir B como X, en el controlador relacionado?

¿Cómo hacerlo en la capa de dominio? Si es una clase Z, digamos "commentable", ¿debo hacer una clase de dominio llamada Comment y decir que Z tiene muchos comentarios? y usar la interfaz en la capa de controlador?

¿Cuál es la forma Groovy de hacer esto correctamente? Estoy un poco confundido y una pequeña aclaración sería realmente agradable.

Gracias de antemano

Respuesta

18

El ejemplo que muestran no es el más adecuado para usar en la aplicación de sus propias interfaces. Esa es una forma conveniente de implementar solo parcialmente una interfaz. En este ejemplo, solo se implementa el método f, por lo que los demás fallan como lo vio. Esto es útil para probar cuando tiene una interfaz grande, pero solo llama a algunos métodos en la clase bajo prueba, por lo que no necesita implementar toda la interfaz.

Implementar interfaces en maravilloso al igual que en Java:

interface Math { 
    int add(int a, int b) 

    int multiply(int a, int b) 
} 

class SimpleMathImpl implements Math { 
    int add(int a, int b) { 
     a + b 
    } 

    int multiply(int a, int b) { 
     a * b 
    } 
} 
+0

¿Estás seguro de que no llegué a ver algunos ejemplos individuales de este tipo existe maravilloso aun no está seguro de los implementos de palabras clave – add9

+0

por lo relativo a la cuestión de diseño si puedo definir una interfaz como en Java, implementarla en el Controlador y usar hasMany en el dominio sería lo correcto. – add9

+3

Hay pocas ventajas al usar interfaces en Groovy (o Grails) ya que puede llamar al método que desee: Groovy admite "pato escribiendo". Algunos complementos los usan, pero en realidad son más como interfaces de "marcador" sin ningún método, y solo se utilizan para clasificar tipos para que pueda verificar si hay "instancia de MyInterface" y actuar en consecuencia. Pero aparte de eso, no hay realmente ninguna razón para usar interfaces. –