2009-05-20 3 views
1

オープンクラスまたはサルパッチと呼ばれる機能の使用方法が不思議です。 Ruby、Python、Groovyなどがあります。この機能を使用すると、実行時に既存のクラスやオブジェクトに変更(メソッドの追加や置き換えなど)を行うことができます。「主要な」フレームワークでは、サルパッチ/オープンクラスを使用していますか?

主要なフレームワーク(Rails/Grails/Zopeなど)が開発者にサービスを提供するためにこの機会を(広範囲に)利用するかどうかは誰にも知られていますか?その場合は、例を提供してください。

答えて

8

Railsは(IMHO)ばかげた程度までこれを行います。

2

.Netでは拡張メソッドを使用できます。

Linqは、具体的には、IEnumerableインターフェイスにサンドキーパッチされた拡張メソッドに大きく依存しています。

+0

私は知っていますが、それは私がここで求めているものではありません。 – Eyvind

+0

多分それをやや狭めれば:具体的には、 "delper [sic]にサービスを提供する"ために、IEnumerableインターフェースにサンドキーパッチを適用した拡張メソッドを多用しています。 –

+0

私は分かりませんが元のクラス/インタフェースに変更が加えられていないため、これは実際には猿のパッチ適用と見なされます。 (誤字を指摘してくれてありがとう、BTW :) – Eyvind

1

Javaプラットフォームでの使用例(Groovyを述べたので)は、AspectJとJVM計測器のようなものでロード時に織り成すことです。ただし、この場合は、代わりにコンパイル時の織り方を使用することもできます。興味深いことに、私の最近のSOの質問の1つは、このロード時間織りの使用に関する問題に関連していました。

ロードタイム(ランタイム)ウィービングを使用して開発者に役立つサービスを提供するAspectJの例は、SpringのBeanFactoryでインスタンス化されていないオブジェクトでDependency Injectionを使用できるSpringの@Configurationアノテーションです。

具体的には、メソッドの変更(または動作の仕方)について言及しています。使用されている例は、ハンドラ(一部のコントローラメソッドまたはdoPostなど)に送信される前にHTTPリクエストを傍受し、ユーザーがそのリソースにアクセスする権限を持っているかどうかを確認します。あなたの側面は、早期に、ログインするためのリダイレクトを返すことを決定することができます。メソッド自体の内容を変更するのではなく、それ以外の場合に返される戻り値を変更する方法の変更方法は変わりません。

関連する問題