Ich versuche, Entwicklern zu erlauben, meinen Code an bestimmten Punkten der Ausführung zu erweitern.Entwurfsmuster, um Code an bestimmten Punkten injizieren zu lassen
Mein spezifisches Beispiel ist ein Datenbank-Transaktions-Wrapper. Der Wrapper kümmert sich um viele Details, die wir vom Entwickler abstrahieren wollten und wird in mehreren Projekten verwendet.
Jedes Projekt hat jedoch bestimmte Dinge, die sie während der Transaktion automatisch tun möchten. Ich möchte Interception-Punkte hinzufügen, die jedes Projekt zum Ausführen von Code einrichten kann.
Zum Beispiel hat jede Tabelle in unserer Datenbank ein Eingabedatum Feld, das jedes Mal aktualisiert wird, wenn sich der Datensatz ändert. Wir möchten jedoch, dass alle Daten für eine Transaktion gleich sind, obwohl viele Datensätze berührt werden (d. H. 4 Datensatztabelle A, 1 Datensatz in Tabelle B, ...).
Mein Gedanke ist, Abfangpunkte "TransactionStarting", "TransactionStarted", "StatementExecuting", "StatementExecuted", ... zu definieren und ein Kontextobjekt an jeden Punkt zu übergeben.
Dann kann das Projekt eine Klasse "EnteredDateManager" definieren, die das aktuelle Datum während des "TransactionStarted" -Punkts speichert und die EnteredDate-Eigenschaft jedes Objekts während des "StatementExecuting" -Punkts aktualisiert.
Ich möchte dies in der Datei web/app.config einrichten und ermöglichen die Registrierung mehrerer Interception-Klassen. Wenn mehrere Klassen registriert sind, sollten sie in der Reihenfolge ausgelöst werden, in der sie registriert wurden.
Ich dachte daran, nur Ereignisse zu erzeugen, aber ich will, dass Ordnung wichtig ist. Ich möchte auch in der Lage sein, den Zustand zwischen den verschiedenen Punkten zu teilen. In meinem obigen Beispiel wird die EnteredDate-Eigenschaft im TransactionStarted-Punkt festgelegt und im StatementExecuting-Punkt verwendet.
Ist dies das Muster der Verantwortungskette? AOP? Es scheint nahe zu sein, wie die ASP.Net-Pipeline funktioniert, aber sie verwenden Ereignisse und garantieren nicht, soweit ich weiß.
Jede Richtung/Beispiele wäre großartig.
Dank