1

私のGrailsアプリでは、人は何かを好む-そしてその何かはアイデア、決定、グループ、または別の人である可能性があります。

Javaでは、Somethingインターフェースを課して、これらの各クラスをSomethingタイプとして渡すことができるようにします。

Groovy / Grailsでは、SomethingがGroovyクラスであり、FondnessクラスがPersonsをSomethingsにマップするコレクションクラスである場合に機能していました。

この場合、ダックタイピングを活用しようとするとつまずきます。インターフェイスを強制せずに、Personをクラスのグループのいずれかにマッピングするコレクションクラスを設定するにはどうすればよいですか?

アドバイスありがとうございます!G/G開発者がこれにどのように取り組むかを聞いて興奮しています。

-明細書

4

2 に答える 2

1

別のオプションは、抽象基本クラスです。そのサポートは 1.4 で大幅に改善されました - http://jira.grails.org/browse/GRAILS-2583を参照してください- 今週リリースされる 1.4M1 で使用できます。

于 2011-05-23T16:59:02.357 に答える
0

このNabble スレッドに出くわしました。これは、あなたが求めているものに似ている可能性があります。これは興味深い解決策であり、ハックのように思えますが、おそらく問題なく機能します。

スレッドのコード サンプルを次に示します ( Martin Dowの厚意による- 彼がこれに出くわし、これを回答として投稿した場合、私はそれを私の回答から削除し、彼に賛成票を投じます)。

class SomeDomainClass { 
  Long associationId
  String associationClass
  def getAssociation() {
    // Handle proxied class names
    def i = associationClass.indexOf('_$$_javassist')
    if (i > -1) associationClass = associationClass[0..i-1]
    getClass().classLoader.loadClass(associationClass).get(associationId)
  }
  def setAssociation(association) {
    associationId = association.id
    associationClass = association.class.name
  }
}

いくつかの方向性を示す可能性のある型を含むいくつかのオプションを次に示します。

列挙型

class Person {
    static hasMany = [fondnessess: Something]
}

enum Something {
    ONE_SOMETHING,
    ANOTHER_SOMETHING;
}

継承

(私は継承の熱烈なファンではありませんが、場合によっては継承が問題ない場合もあります。)

class Person {
    static hasMany = [somethings: Something]
}

class Something {
    // could be abstract, but look out for
    // http://jira.grails.org/browse/GRAILS-6780
}

class OneSomething extends Something { ... }

class AnotherSomething extends Something { ... }

Somethingそれは、各実装で定義する必要があるロジックの量によって異なります。これらの例はどちらも機能させることができ、おそらく他の解決策もあるでしょう。

于 2011-05-23T14:54:13.653 に答える