0

Groovy/Grails には、GORM の一部として動的ファインダーと呼ばれる非常に優れた機能* があり、「ファントム メソッド」を使用して実装されます。この機能では、動的メッセージ インターセプターを使用してオブジェクトにメッセージをフィールドし、名前が現在の実際のメソッドでない場合は、ただし、次の特定の形式に一致します: (フィールド + コンパレータ) そのロジックのフィルター述語メソッドを合成します。Groovy は「MethodMissing」メソッドでこれを特別にサポートしており、Grails/GORM はそのフックを使用してこの合成されたファインダー ロジックを追加します。

たとえば、次のようなことができます。

   students.gpaLessThan(3.0).nameLike("Smith").stateEquals("Iowa");

コレクションからフィルタリングされた結果を取得します。これらのメソッドはいずれもユーザーが作成したものではありません。

メッセージインターセプターと合成に動的プロキシを使用して、Javaで同様の(並列)ことを行うことができるようです。私はこれで遊ぶつもりでしたが、他の誰かがすでにこのようなことをしたのだろうか. さらに、アノテーションを使用して、そのような合成された名前に静的な型チェックを実装できるかどうか疑問に思います。これは、アノテーションが少なくともメソッド参照を含むコードを生成し、コンパイラーがチェックするためです。

[*私は Groovy ユーザーではありませんが、この機能のサンプルをいくつか読んだだけなので、Groovy 実装の詳細について正しくない可能性があります。]

4

2 に答える 2

1

Spring Rooを見てください。これは、Grails から多くのインスピレーションを得た Java ベースのフレームワークです。Roo には、アスペクトを使用する動的ファインダーの興味深い実装があります。

于 2013-11-13T09:17:15.477 に答える