Frage

Ich denke, es ist ein weit verbreitetes Problem bei Datenbetszenarien. Was tun Sie normalerweise, wenn Sie ein Batch-Update ausführen und vermeiden möchten, dass ein Property-Abhängigkeitsberechnungen/Aktionen/was auch immer für jedes einzelne Update ausgeführt wird?

Das erste, was mir normalerweise in den Sinn kommt, ist, entweder einen neuen Booleschen oder einen neuen Booleschen oder Haken des EventHandlers vorzustellen, ...

Was ich an diesen Ansätzen nicht mag, ist:

  • Sie führen eine neue Komplexität ein (müssen aufrechterhalten werden, ...)
  • Sie sind fehleranfällig, da Sie sicherstellen müssen, dass anschließend eine unterdrückte Benachrichtigungen gesendet werden

Ich frage mich, ob jemand dieses Problem bereits bequemer angesprochen hat, der einfacher zu handhaben ist.

Tia Martin

EDIT: Nicht um mich zu verstehen. Ich kenne die Dinge .NET bietet wie RaiselistChangedEvents von Bindinglist, ... sie alle befassen sich mit dem Problem in mehr/weniger gleicher Weise wie ich beschrieben, aber ich suche nach einer anderen Art, die nicht aufgelistete Nachteile muss . Vielleicht bin ich auf dem falschen Track, aber ich habe es hier aus versuchen ...

War es hilfreich?

Lösung

Leider gibt es keine einzelne Einheit-Fits-All-Lösung. Ich habe die folgenden Lösungen angewendet oder gesehen:

  1. Es gibt zwei Singals. Ein Signal wird emittiert, wenn die Änderung aus einer Benutzeraktion stammt, das andere feuert immer aus. Dies ermöglicht es, zwischen Änderungen in der Benutzeroberfläche und den Aktualisierungen nach Code zu unterscheiden.

  2. Ein Boolescher zum Schutz des Code

  3. Das Immobilienereignisrahmen stoppt, dass sich die Propagierung von Ereignissen automatisch ausbreitet, wenn sich ein Wert nicht wirklich änderte.

  4. Eine Gefrier-/Auftau -Methode auf dem Signal oder dem Signalmanager (dh im gesamten Framework)

  5. Eine Möglichkeit, Signale zu einem einzigen zu verschmelzen. Sie können n Updates durchführen und sie werden in m -Signale gesammelt, wobei m <= N. Wenn Sie dieselbe Eigenschaft 100 Mal ändern, erhalten Sie immer noch nur 1 Signal.

  6. Warteschlange von Signalen (statt synchroner Ausführung). Der Warteschlangencode kann dann auch Signale zusammenführen. Ich habe dies mit großem Erfolg in einer Anwendung verwendet, die keine "Speichern" -Taste hat. Alle Änderungen werden in der Datenbank gespeichert, während Sie sie herstellen. Wenn Sie einen Text ändern, werden die Änderungen über eine bestimmte Zeit zusammengeführt (nämlich bis das vorherige DB -Update zurückgibt) und dann als einzelne Änderung festgelegt.

  7. Eine API, um mehrere Werte gleichzeitig festzulegen; Es wird nur ein einzelnes Signal emittiert.

  8. Das Signalgerüst kann Signale auf verschiedenen Granularitätsniveaus senden. Angenommen, Sie haben eine Person mit einem Namen. Wenn Sie den Namen ändern, erhalten Sie zwei Signale: eine für die Namensänderung und ein "Instanzfeld geändert". Wenn Sie sich also nur "etwas geändert haben" interessiert, können Sie sich anstelle aller Felder in die Instanz einbinden.

Andere Tipps

Welche Plattform? Der Beitrag lässt mich .NET denken.

Was sind die zugrunde liegenden Objekte? Zum Beispiel, BindingList<T> Als Quelle können Sie Benachrichtigungen durch Einstellen deaktivieren RaiseListChangedEvents zu falsch beim Update.

Anders als das (oder ähnlich); Ja, die Bindung während großer Updates trennen

Der einfachste Weg, das zu gehen ist, ist die Verwendung der Verwendung BindingSource Komponente für Ihre Datenbindung. Verwenden Sie dieses Objekt als das Objekt als das, anstatt Ihre Steuerelemente an ein bestimmtes Objekt (oder ILIST) zu binden DataSource für die BindingSource, und binden die Steuerelemente an die BindingSource.

Das BindingSource Klasse hat SuspendBinding() und ResumeBinding() Funktionen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top