Angenommen, Sie möchten dies in der App-Ebene beibehalten, würde ich empfehlen, eine Modellschicht mit Eigenschaften pro Feld zu verwenden, um die Protokollierung durchzuführen. Der gesamte Datenzugriff geht dann durch dieses Datenmodell und gibt Ihnen einen Haken, um Funktionalität hinzuzufügen.
Ein activerecord basierend Beispiel (VBScript):
class cSomeEntity
public db ' link to a db wrapper
private id, dirty, loaded ' varous flags
private sub class_initialize
dirty = false
loaded = false
end sub
private sub class_terminate
if dirty then
db.execute("update some_table set some_field=? where id=?", array(p_some_field, id))
end if
end sub
public sub load_by_id(value)
dim rs
set rs = db.fetch_rs("select id, some_field from some_table where id=?", array(id))
id = rs("id")
p_some_field = rs("some_field")
loaded = true
end sub
private p_some_field
public property get some_field
some_field = p_some_field
end property
public property let some_field(value)
if not loaded then err.raise 1, , "Entity not yet initialized, call .load_by_id() first!"
if value <> p_some_field then
dirty = true
make_log_entry("some_value", p_some_field, value)
p_some_field = value
end if
end property
private sub make_log_entry(field, old_value, new_value)
db.execute("insert into audit_log (table, field, old_value, new_value) values (?, ?, ?, ?)", _
array("some_table", field, old_value, new_value))
end sub
end class
Es könnte ein bisschen aufgebläht erscheinen, aber es ist flexibler als ein Trigger-basierten Ansatz. Zum Beispiel können Sie einfach Reichweitenprüfungen und ähnliches implementieren.
Zweitens, wenn Sie mehrere Entity-Klassen schreiben müssen, können Sie eine Menge Funktionalität in eine Delegate-Klasse schieben und Code-Vorlage verwenden, um die Eigenschaft Getter & Setter zu schreiben.
Sie haben dies als ASP-Classic, PHP und ASP.NET gekennzeichnet. Welches ist es? –
ist es auch getaggt Javascript, das ist eine wirklich schlechte Idee. Verwenden Sie keine Client-Seite für solche Dinge. –
Server-Seite Javascript auf klassischen asp. – Schotime