ドメインクラスがあり、新しいメモが保存されたら、メモが作成されたことを後世に記録Note
する を作成する必要があります。のコレクションがあり、それぞれが所属先を追跡します。NoteEvent
Note
NoteEvents
NoteEvent
Note
Note
クラス:
class Note {
String noteText
Date dateCreated
static hasMany = [events : NoteEvent]
}
NoteEvent
クラス:
class NoteEvent {
Date dateCreated
String type
static belongsTo = [note : Note]
}
NoteEvents
メモが作成されたときに new の保存を処理するafterInsert
ために、私は を使用していました。これは、メモのインスタンスをあちこちに保存しているためです (新しいメモを保存するたびに、特定のイベント作成コードを作成するのは反復的で時間がかかります)。 )、そしてbeforeInsert
明らかにまだ永続化されたインスタンスを扱ってNote
いません — がNoteEvent
その として持つものは何もありませんnote
。
だから今私のNote
クラスは:
class Note {
String noteText
Date dateCreated
static hasMany = [events : NoteEvent]
def afterInsert = {
def event = new NoteEvent(type: "CREATED")
addToEvents(event)
save()
}
}
しかしNoteEvent
、これらのメモの 1 つが更新されたときにも作成する必要があります。ここで、混乱と落胆、コーヒーの大幅な不足が発生します。更新さNoteEvent
れたときに新しい「更新」をメモに添付するために、私は見事に次のように決定しました。インスタンスafterUpdate
を更新する必要があるたびに、イベント作成コードがアプリ全体に散らばるのを避けるために、もう一度 を使用します。Note
だから今、Note
私は持っています:
class Note {
String noteText
Date dateCreated
static hasMany = [events : NoteEvent]
def afterInsert = {
def event = new NoteEvent(type: "CREATED")
addToEvents(event)
save()
}
def afterUpdate = {
def event = new NoteEvent(type: "UPDATED")
addToEvents(event)
save()
}
}
メモのコレクションに新しいイベントを追加するために、動的addTo()
メソッドを使用していますが、これsave()
にはインスタンスの が必要です。しかし、「後」イベントの場合、これは への 2 回目の呼び出しsave()
です。したがって、最初に新しいインスタンスを保存してafterInsert
が呼び出されると、保存されたばかりのインスタンスがすぐに再度保存され、afterUpdate
イベントが発生します。これで、2 つのノート イベントが発生します。メモ、および「作成された」メモによってメモが再度保存されたときの「更新された」メモ。
この状況で代わりに「前」イベントを使用することがどのように役立つかは、私には明らかではありません。他にどうすればこれを行うことができますか?