it-swarm.com.de

Umgang mit widersprüchlichen Aktualisierungen eines Kundendatensatzes

Wir entwickeln eine einfache webbasierte, einseitige CRM-ähnliche App. Ich habe darüber nachgedacht, was passiert, wenn zwei Bediener die Details eines Kunden "John Doe" bearbeiten. Auf der Serverseite verwenden wir eine optimistische Aktualisierung, d. H. Die Nutzlast des Ajax-Updates enthält die Revisionsnummer, die mit der in der Datenbank enthaltenen übereinstimmen muss. Im Front-End habe ich mich jedoch gefragt, wie wir damit umgehen sollen.

Ich dachte an ein modales Popup wie folgt: "Sorry, AgentB hat den Datensatz bereits aktualisiert und Ihre Arbeitskopie ist möglicherweise nicht aktuell? Möchten Sie:" (a) Aktualisieren trotzdem (b) Neu laden (c) Eine Form der Zusammenführung

Ich kann mir jedoch vorstellen, dass die Benutzer dadurch verwirrt sind. Dann denke ich, dass dieses Szenario bereits millionenfach behandelt worden sein muss. Gibt es Richtlinien und fantastische Referenz-Apps, die zeigen, wie solche häufigen Probleme in einer webbasierten Geschäftsanwendung für mehrere Benutzer am besten gelöst werden können?

Wir sind offen für alle erforderlichen Kühlmittel, um die beste Lösung zu erzielen (Websockets, UI-Frameworks usw.).

19
MattUI

Sie versuchen, mit der gleichzeitigen Bearbeitung umzugehen, und leider gibt es dafür keine einfache Lösung. Die gängigen Methoden, um damit umzugehen, sind:

  1. Sperren Sie den Datensatz, wenn jemand mit der Bearbeitung beginnt. Dies verhindert, dass ein zweiter Benutzer einen Datensatz bearbeitet, der gerade bearbeitet wird, und sollte ihn darüber informieren (möglicherweise) Ein Name) bearbeitet diesen Datensatz. Dies ist im Allgemeinen die sicherste, aber manchmal treten Probleme auf, bei denen etwas schief geht, während ein Datensatz gesperrt ist, und dann kann niemand darauf zugreifen. Wie @Marjan bereits erwähnt hat, bereitet es auch Kopfschmerzen, wenn nichts schief geht, aber jemand mit der Bearbeitung beginnt und dann zum Mittagessen ausgeht. Wenn Sie diese Methode verwenden, sollten Sie 'optimistisches Sperren' oder ' optimistische Parallelitätskontrolle ' verwenden, um nach den letzten Datensatzänderungen zu suchen. Ich werde nicht darauf eingehen, wie ich damit umgehen soll, da es sich um eine StackOverflow-Frage handelt.

  2. Ermöglichen Sie mehreren Personen, einen Datensatz gleichzeitig zu bearbeiten, und aktualisieren Sie den Datensatz einfach, wenn jeder Benutzer seine Änderungen speichert. Dies ist am einfachsten zu implementieren, kann jedoch einige sehr frustrierende Konsequenzen haben, wenn eingegebene Daten fehlen, obwohl jemand sicher ist, dass er sie eingegeben hat. Ich würde von dieser Methode abraten .

  3. Ermöglichen Sie Aktualisierungen des Inhalts in Echtzeit, damit jeder Editor die Änderungen in Echtzeit sehen kann. Dies ist aus Anwendersicht am besten geeignet, aber technisch am schwierigsten zu implementieren. Wenn Sie können , würde ich diese Methode empfehlen . Als geringfügige Änderung dieser Methode können Sie eine Art Mini-Sperre verwenden, bei der jedes Feld gesperrt wird, während ein Benutzer es bearbeitet, jedoch nicht der gesamte Datensatz. Auf diese Weise geht HotGloo beispielsweise mit gleichzeitigen Benutzern um und funktioniert gut.

Zusammenfassung: Wenn Sie nicht viel Zeit und Ressourcen haben, verwenden Sie Option 1. Wenn Ressourcen und Zeit kein Problem darstellen, wählen Sie Option 3. Vermeiden Sie Option 2, es sei denn, Sie sind sicher, dass nicht mehrere Benutzer gleichzeitig einen Datensatz bearbeiten.

13
JohnGB

Versionierungssysteme machen Spaß.

Obwohl Versionsverwaltungssysteme und -modelle vorhanden sind, treten die Probleme beim Bearbeiten derselben Datei wie bei einer anderen Person normalerweise wieder bei der Verwaltung auf (entweder bei der physischen Verwaltung oder bei der Personalverwaltung). Wenn zwei Personen dieselbe Datei gleichzeitig geöffnet haben, treffen sie wahrscheinlich selbst Entscheidungen, es sei denn, dies ist erforderlich.

Davon abgesehen gibt es Fälle, in denen zwei Personen möglicherweise dieselbe Überarbeitung vornehmen möchten. Meine Frau und ich sprachen über Online-Rechnungszahlungen in unserer Bank. Mit dem vorhandenen System ist es mir durchaus möglich, eine automatische Rechnungszahlung einzurichten und eine unter ihrem Login einzurichten. Während wir dasselbe Konto verwenden, gibt es keine Möglichkeit zu sagen, dass dieselbe Zahlung zweimal von demselben Bankkonto abgebucht wurde, da die Bank die Privatsphäre der Benutzer behandelt. Dies ist ein großes Problem für uns, da wir die Zahlung von Rechnungen nicht an die eine oder andere delegieren können oder die Sicherheit unserer Konten gefährden müssen, indem wir dasselbe Login an mehr als einem Ort teilen (zusätzliches Risiko).

Aus programmtechnischer Sicht stehen mehrere Optionen zur Verfügung

Vielleicht möchten Sie sich etwas wie etherpad ansehen, um eine Vorstellung davon zu bekommen, wie es funktioniert. Google hat die App in Google Wave integriert. Grundsätzlich ist es eine kollaborative Echtzeit, was bedeutet, dass Sie sehen können, wie andere Personen tippen, und Sie können sehen, wer gerade tippt und welche Änderungen sie vornehmen. Hier ist ein Beitrag über Lifehacker mit den 10 besten Tools für die Webzusammenarbeit.

Softwareentwicklungsteams verwenden Anwendungen wie CVS (Concurrent Versioning System), um zu bearbeitende Dateien auszuchecken. Wenn eine andere Person eine Verbindung zu der Datei herstellt, haben sie keine Option. Smashing Magazine hat einen Artikel mit 7 CVS-ähnlichen Versionssystemen.

Versionierung gibt es sogar für Texter

Anwendungen wie Microsoft Word, Adobe Indesign und Adobe InCopy verwenden die Versionierung und erstellen eine gesperrte Version einer Datei, sodass andere Benutzer sie im schreibgeschützten Modus anzeigen können. Word kann auch Änderungen in einer Datei verfolgen und dann verschiedenen Personen ermöglichen, die Änderungen zu autorisieren oder festzuschreiben. InCopy und Indesign ermöglichen es zwei Personen, an derselben Datei zu arbeiten. Der zweite Benutzer importiert den bearbeiteten Inhalt in sein Dokument.

Wenn ich Webdesign mache, verwende ich Adobe Dreamweaver. Während es in CVS integriert ist (wenn Sie Ihren Server dafür konfiguriert haben), können Sie auch eine Anwendung zum Erkennen von Dateiunterschieden und zum Verfolgen von Änderungen angeben. In diesem Fall verwende ich WinMerge , das mir Zeile für Zeile anzeigt, welche Zeilen sich geändert haben und beide Versionen des Dokuments bearbeitet werden können. Es ist großartig, um einen zeilenweisen Vergleich von Dateien anzuzeigen.

Eines der anderen Versionierungssysteme, mit denen ich in den letzten Monaten vertraut geworden bin, wird hier in Stack Exchange verwendet. Ich untersuche alles unter dem Gesichtspunkt der Benutzererfahrung und wende meine Ergebnisse auf Projekte an. Grundsätzlich bemerkt ein Javascript-Listener die Änderung, wenn eine Änderung im System vorgenommen wird, und aktualisiert die Benutzeroberfläche, um Sie darüber zu informieren, dass eine neue Antwort veröffentlicht oder eine Bearbeitung des Inhalts vorgenommen wurde. Anschließend werden Sie aufgefordert, den Inhalt zu aktualisieren. Dies ist eine der besseren Methoden, die ich gesehen habe, um Menschen über Änderungen zu informieren. Während die Ausführung von Änderungen an Code oder Kopie nicht immer die beste ist, können Sie jemandem eine Vorschau der Änderungen in einem kleinen Fenster anzeigen, bevor er sie lädt.

Wenn ich MySQL Workbench (eine Datenbank-Connector-GUI) verwende, um direkt an Datenbanken zu arbeiten, habe ich festgestellt, dass sie bei der Durchführung ihrer Datenbankaktualisierungsabfragen sehr klug sind. Nach meiner Erfahrung ersetzen die meisten Webentwickler einen gesamten Datensatz, unabhängig davon, ob Änderungen vorgenommen wurden oder nicht (weil dies einfacher ist). In Workbench haben sie sich Zeit genommen und ersetzen nur den geänderten Datensatz. Wenn ich also eine Telefonnummer in einer Zeile und einen Titel in einer anderen Zeile aktualisiere, zeigen meine Datenbank-SQL-Updates nur die Telefonnummer für die erste ID und den Titel für die zweite ID an. Dies kann definitiv die Menge der überschriebenen Kopien reduzieren, da die meisten Informationen in einer Datenbank gespeichert sind.

Es ist ein bisschen mehr Arbeit, aber wenn Sie Zeit haben, würde ein System, das viele dieser Funktionen zusammenführt, auf lange Sicht die beste Benutzererfahrung bieten und die meiste Zeit (und Geld aufgrund doppelter Arbeit und überschriebener Datensätze) sparen.

2
AbsoluteƵERØ

Der beste Weg ist, diesen Konflikt tatsächlich zu vermeiden, indem Sie den Status eines Kunden in Echtzeit aktualisieren, sodass andere Benutzer gesperrt werden (oder eine schreibgeschützte Ansicht bereitstellen), sobald ein Benutzer mit der Aktualisierung beginnt. Wenn Sie jedoch benötigen, dass beide Benutzer auf dieselben Datensätze zugreifen und diese aktualisieren können, müssen Sie in der Lage sein, doppelte Instanzen zu erstellen, für die eine automatische oder manuelle Zusammenführung erforderlich ist (empfohlen). Aus Sicht der Benutzerfreundlichkeit ist es besser, dass ein Benutzer den Status von etwas kennt, als Änderungen vorzunehmen und etwas zu sehen, das sich von dem unterscheidet, was seine vorherige Aktion anzeigen würde. Dies hängt jedoch davon ab, wie die Benutzer das System verwenden möchten und welche spezifischen Geschäftsanforderungen in Bezug auf Kundeninformationen bestehen. Vielleicht würde es funktionieren, wenn nur einige Felder bearbeitet werden könnten (z. B. ein Abschnitt mit nur Textnotizen) und andere schreibgeschützt wären.

0
Michael Lai