2012-03-22 29 views
2

Javaでは、オブジェクトのプロパティが変更されるたびにオブジェクトがイベントを発生させる最もエレガントな方法は何ですか?オブジェクトのプロパティが変更されたときのJava - fireイベント

私のドメインモデルは、私はlastUpdatedは「今日」に設定する必要が

class MyClass { 

    String id; 
    String name; 
    Collection<MyThing> mythings= new HashSet<MyThing>(); 
    // more fields... 
    Date lastUpdated; 

    //constructor, getters and setters, etc 
} 

のようないくつかのオブジェクトを持っている時はいつでもプロパティ(ID /名前/ mythings)の変更のいずれか。

私はJDO固有ではなく、このロジックをデータストア(RDBMSの自動タイムスタンプ列など)で間違いないようにしたいと考えています。

私はすべてのセッターに

this.lastUpdated = new Date(); 

を置く、またはすべてのセッターでカスタムイベントを発生、それは醜いとエラーが発生しやすいのですができます。

もっと洗練されたソリューションはありますか?

+0

FYI、これは正確にJavaの豆が何であるかのように、あなたがそれらに見たいと思うかもしれません聞こえます。 –

+1

バイトコードの拡張を行わない限り、AOPにはインターフェイスが必要です。私は通常、モデルオブジェクトのためのインターフェイスを使用しません。私はこのユースケースのためにAOPをお勧めしません。 – duffymo

答えて

1

PropertyChangeListenerインターフェイスを実装して、クライアントの一部に関心を登録することができます。 1.0以降、Java Bean仕様の一部となっています。

これらはすべてUI要素に関するものではありません。これらは、VBのような機能をIDE(例えば、Bean Factory)とマッチさせる手段として考えられていました。

http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html

http://weblogs.java.net/blog/joshy/archive/2006/02/all_hail_the_pr.html

+0

私はそれを見つけました。 http://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html#bound - 私はまだこの動作をしたいすべてのプロパティのsetterでfirePropertyChangeを持っていなければならないような例を見ていますか? – MT1

+0

他にどのようなことが起こると思いますか? – duffymo

+0

私は、使用できるどこかに埋め込まれた自動 "onUpdated"イベント、または私が拡張できるその機能を備えたクラスがあることを期待していました。あなたの答えは「それが得られるほど良い」と思われます。ありがとう! – MT1

関連する問題