Frage

Ich Baue eine Anwendung mit den folgenden Kriterien:

  • Arbeitsaufgaben:Elemente, die werden müssen manuell gearbeitet, über das web von den Nutzern (kurze Seite der form)
  • Mehrere Benutzer arbeiten", Arbeitselemente'
  • Jeder Nutzer hat eine Warteschlange von 'Arbeit Elemente'
  • Es ist eine Suche, die ermöglicht Benutzern das anzeigen von "Arbeit posten' und weisen "Arbeit Elemente", um Ihre Warteschlangen
  • Benutzer können 'Arbeit Elemente' aus anderer Leute Warteschlangen, indem Sie Sie selbst

Hinweis:'work items" funktioniert nur einmal.Dies ist nicht eine wiki-Seite, es ist mehr eine passende übung, die nur durchgeführt werden sollte, einmal durch einen Benutzer.Sobald Sie auf 'Workitem' gearbeitet wird, ist es Weg, aus dem system (abgesehen von einigen auditing/reporting), so Etwas wie ein bug-tracking-system

Die option glaubst du ist besser?Können Sie zitieren alle mainstream-Anwendungen, unterstützen Sie Ihre Meinung?

Option 1:

  • Wenn Ein Benutzer geht, um anzuzeigen, oder einen "work item", die "work-item" wird gesperrt.
  • Wenn andere Benutzer gehen, um die 'Workitem' nach Benutzer A öffnet die 'Workitem', Sie wird nur in der Lage sein zu finden die 'Workitem'.Sie können nicht schreiben.
  • Das Schloss verfällt nach n Minuten an welchem Punkt kann ein anderer Benutzer sperren 'Workitem'.

Option 2:

  • Jeder Benutzer kann sich ziehen, bis ein "work item", ohne dass es gesperrt wird.
  • Wenn der Benutzer Einen funktioniert 'Workitem' mit dem Absenden des Formulars und Benutzer B funktioniert 'Workitem', dann Benutzer die Arbeit wirkt sich in der Datenbank und Benutzer B wird darüber informiert, dass Ihre änderungen nicht wirksam werden, weil ein anderer Benutzer modifiziert hat der 'Workitem'.

Ich persönlich mag die option 2.Gedanken bitte?

War es hilfreich?

Lösung

Klingt wie Sie sprechen pessimistisch Verse optimistisch concurrency control.

Beide sind weit verbreitet, ich persönlich finde, dass optimistische Parallelität leichter zu behandeln, aber es hängt auf Ihre eigenen Anforderungen und Nutzung.Wenn änderungen (und potenzielle Konflikte) sind häufige dann pessimistische Parallelität kontrollieren kann angebracht sein, wenn nicht, dann ist die vollständige Parallelität wird schneller und einfacher, mit zu arbeiten.

Lassen Sie mich wissen, wenn Sie wollen, um zu sehen, code-Beispiele mit RowVersion - Datentyp in SQL Server (das ist, was ich verwende), es ist ziemlich einfach, aber:

  • Alle Tabellen enthalten RowVersion-Spalte
  • Alle SELECT-Abfragen gehören diese Spalte (für Daten, die geändert werden kann)
  • Alle UPDATE-oder DELETE-Abfragen gehören, WO RowVersion = @RowVersion.Das ist der optimistische Teil, wenn 0 Zeilen zurückgegeben, dann hat jemand anderes berührt die Zeilen, die kein update stattfindet, so sagen Nutzer über es.HINWEIS:Wenn die Zeile aktualisiert wurde dann der neue Wert für RowVersion sollte auch zurückgegeben werden.Dies gilt auch für die Abfragen EINFÜGEN, so wie Sie Rückkehr die Id einer identity-Spalte nach einem insert.

Andere Tipps

Nicht sicher, wie Sie Sie beschreiben die form, in einfach ausgedrückt, aber es ist nicht eine Gemeinschaft page, die eine einmalige Sache.Rein hypothetisch, sagen wir, der Benutzer hatte den Namen John DOEE zu einem die folgenden John Doe Jon noch Einmal Tun es wird gearbeitet, der Schnitt beendet ist.In unsere Fall ist, würden wir nicht brauchen, um bloße

Wenn man bedenkt, dass Kommentar, ich würde mit option 1.Bedenkt man, dass diese änderungen sind eine Zeit, änderungen, es ist kein Vorteil, dass mehrere Personen zu arbeiten auf der gleichen ändern.Sie sind nur verschwenden die 2. person Zeit.

Ich persönlich würde mit option 2 - plus, wenn es anwendbar ist (zum Beispiel die Bearbeitung auf einem längeren text) zu machen es in der Verantwortung des Benutzers B zum Zusammenführen der änderungen.Geben Sie B ein Werkzeug, dies zu tun.

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