2011-06-21 4 views
8

私はソーシャルウェブアプリプロジェクトを開始しようとしています。Groovyのインターフェース

私はクラスを設計していましたが、必要なときにクラスを使用するには、「コメント可能」または「好き」のようなインターフェイスを定義することにしました。

しかし、私はそれをGroovyで実装する方法を理解できませんでした。これは学習段階です。

以下の例は、私はちょうどならないGroovyのドキュメントからのもので、

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 

が、これは私のインターフェースの一つである、と私は、このインターフェイスを実装するためにBと呼ばれるクラスを使用したいと...

関連コントローラでBをXとしますか?

どのようにドメイン層でそれを行うには?クラスZが "commentable"と言うならば、私は単にCommentと呼ばれるドメインクラスを作成し、Z hasMany Commentと言うでしょうか?コントローラ層でインターフェイスを使用しますか?

これを正しく行うためのGroovyの方法は何ですか?私はちょっと混乱していて、ちょっとした説明が本当にいいです。事前

答えて

18

あなたが示す例では

おかげで、独自のインタフェースを実装するときに使用する権利ものではありません。これは、インタフェースを部分的に実装するのに便利な方法です。この例では、fメソッドのみが実装されているため、他のメソッドは見たとおりに失敗します。これは、大規模なインターフェースを持っているがテスト中のクラスでいくつかのメソッドを呼び出すときにテストするのに便利なので、インターフェース全体を実装する必要はありません。

あなたは、JavaのようなGroovyでのインターフェイスを実装します。

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

は、あなたは私がimplementsキーワードは、私が定義することができますので、もし、設計問題に関するGroovyの – add9

+0

存在してもわからない。このような、任意の単一の例を参照してくださいdidntのことについて確信していますJavaのようなインターフェースをControllerに実装し、ドメインでhasManyを使用するのは正しいことでしょうか? – add9

+3

Groovy(またはGrails)でインターフェイスを使用することにはメリットはありません。Groovyは「ダックタイピング」をサポートしています。プラグインの中には、メソッドを使用しない「マーカー」インターフェースとして使用するものがありますが、タイプを分類するために使用されているため、「instanceof MyInterface」をチェックしてそれに応じて処理できます。しかしそれ以外には、本当にインターフェイスを使用する理由はありません。 –

関連する問題