2011-06-21 17 views
8

Zaraz rozpocznie się projekt aplikacji społecznościowej.Interfejsy w Groovy

Podczas projektowania klas zdecydowałem się zdefiniować interfejsy takie jak "komentarz" lub "sympatyczny", aby móc z nich korzystać w razie potrzeby.

Jednak nie mogłem go zrozumieć, jak go wdrożyć w Groovy, że jestem w fazie nauki.

Poniższy przykład pochodzi z Groovy dokumentacji

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 

że jest to jeden z moich interfejsów i chcę użyć klasy o nazwie B wdrożyć ten interfejs ..

będę tylko powiedz B jako X w powiązanym kontrolerze?

Jak to zrobić w warstwie domeny? Jeśli klasa Z jest, powiedzmy "komentarz", czy powinienem zrobić klasę domeny o nazwie Comment i powiedzieć Z hasMany Comment? i korzystać z interfejsu w warstwie kontrolera?

Jaki jest sposób Groovy to zrobić poprawnie? Jestem nieco zdezorientowany i małe wyjaśnienie byłoby naprawdę miłe.

góry dzięki

Odpowiedz

18

przykład pokazać nie jest właściwa do wykorzystania przy realizacji własnych interfejsów. To wygodny sposób na częściowe zaimplementowanie interfejsu. W tym przykładzie zaimplementowana jest tylko metoda f, więc pozostałe zawodzą, tak jak to widziałeś. Jest to przydatne do testowania, gdy masz duży interfejs, ale wywołujesz tylko kilka metod w testowanej klasie, więc nie musisz implementować całego interfejsu.

zaimplementować interfejsy w Groovy podobnie jak w Javie:

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

jesteś pewien, że nie widziałem żadnych pojedynczych przykładów, jak to nawet nie wiem, wdraża kluczowe istnieje Groovy – add9

+0

więc dotyczące kwestii projektowania czy mogę zdefiniować Interfejs, podobnie jak w Javie, implementowanie go w kontrolerze i używanie hasMany w domenie byłoby właściwym działaniem? – add9

+3

Używanie interfejsów w Groovy (lub Grails) ma niewielką zaletę, ponieważ można wywoływać dowolne metody - Groovy obsługuje "pisanie kaczkami". Niektóre wtyczki używają ich, ale bardziej jako interfejsy "markera" bez metod, i są używane tylko do klasyfikowania typów, dzięki czemu można sprawdzić "instanceof MyInterface" i odpowiednio działać. Ale poza tym naprawdę nie ma powodu, aby używać interfejsów. –