Ich arbeite an einem Silverlight-Client und damit verbundenen ASP.NET-Webdiensten (nicht WCF), und ich muss einige Funktionen implementieren, die Benutzereinstellungen wie ein "favorite items" -System enthalten, und ob sie Word-Wrapping oder nicht. Um die Benutzererfahrung angenehm (und nicht ärgerlich) zu machen, möchte ich diese Einstellungen für alle Sitzungen beibehalten. Eine kurze Untersuchung legt nahe, dass es zwei Hauptmöglichkeiten gibt.
Mir ist klar, dass Option 2 wahrscheinlich die beste Option ist, da sie sicherstellt, dass selbst wenn ein Benutzer isolierten Speicher für Silverlight deaktiviert, ihre Präferenzen bestehen bleiben, aber ich möchte die Last einer Datenbank zu dieser Zeit vermeiden, und ich wie die Idee, dass die Einstellungen zum Laden und Bearbeiten verfügbar sind, auch wenn die Serververbindung nicht verfügbar ist. Ich bin jedoch offen für begründete Argumente, warum es besser wäre, diesen Treffer jetzt und nicht später zu nehmen.
Was ich suche, sind Vorschläge für die beste Methode zur Implementierung der Persistenz von Einstellungen in beiden Szenarien. Wenn beispielsweise isolierter Speicher verwendet wird, sollte ich ein XML-Format oder ein anderes Dateilayout verwenden, um die Einstellungen beizubehalten. Wenn der Datenbankansatz verwendet wird, muss ich eine Einstellungstabelle entwerfen oder gibt es einen integrierten Mechanismus in ASP.NET, um dies zu unterstützen, und wie kann ich die Einstellungen dem Client bereitstellen?
Also:
Welche Lösung ist die bessere Lösung für die Persistenz der Benutzerpräferenz? Wie können Einstellungen in dieser Lösung beibehalten werden und wie kann der Client darauf zugreifen und sie aktualisieren?
Beachten Sie, dass ich eine kleine Voruntersuchung zu diesem Thema durchgeführt habe und die folgenden Links gefunden habe, die je nach dem, was Sie gelesen haben, für eine der Lösungen zu sprechen scheinen.
Es stellt sich heraus, dass Microsoft als isolierten Bestandteil von Silverlight Einstellungen für die Persistenz im isolierten Speicher zur Verfügung gestellt hat (ich habe es irgendwie verpasst, bis ich eine Alternative implementiert habe). Meine Antwort unten enthält weitere Details dazu.
Ich halte die Frage offen, obwohl Microsoft zwar clientseitige Einstellungen vorsieht, dies aber nicht unbedingt der beste Ansatz für persistente Benutzereinstellungen ist, und ich würde gerne mehr Meinungen und Vorschläge dazu einholen.
Nach einigen weiteren Untersuchungen und der Implementierung meiner persistenten XML-dateibasierten Einstellungen unter Verwendung von IsolatedStorage entdeckte ich die IsolatedStorageSettings Klasse und die IsolatedStorageSettings.ApplicationSettings Objekt, das eine Schlüssel / Wert-Sammlung speziell zum Speichern benutzerspezifischer Anwendungseinstellungen ist.
Es scheint alles jetzt offensichtlich. Natürlich wäre ein Mechanismus zum Sichern und Wiederherstellen von Einstellungen mithilfe einer Server-Datenbank langfristig eine gute Verbesserung dieser clientseitigen Einstellungspersistenz.
Ich denke, im Allgemeinen würde der Standardwert auf dem Server gespeichert werden; nur wenn es bestimmte zwingende Gründe gibt, auf dem Client zu speichern, sollten wir dies tun. Je mehr Sie sich auf die Speicherung in einem Medium verlassen, das Sie nicht kontrollieren können, desto mehr Risiko nehmen Sie an.
Nachdem dies gesagt wurde und ich mich auf die "Datenbankseite" des Arguments stelle, würde ich fragen, was der Nachteil einer Datenbank ist? Sie erwähnten die Verwendung von XML - sind Ihre Daten nur halbstrukturiert? Wenn ja, warum nicht XML in einer SQL-Datenbank speichern? Etwas so Einfaches einzurichten würde von den meisten Standards nicht als "Last" angesehen werden. Ein einfacher Webservice könnte als Bindeglied zwischen Ihrem Silverlight-Client und der Einstellungsdatenbank fungieren.
Wenn es für Sie eine wichtige Funktion ist, dass Benutzer im Offline-Modus auf ihre Einstellungen zugreifen können, dann scheint es, dass isolierter Speicher die beste Lösung für Sie ist. Wenn es wichtiger ist, dass Benutzer Präferenzen speichern können, selbst wenn sie isolierten Speicher abgeschaltet haben (ist das wirklich ein Problem?) Ich wäre versucht, YAGNI hierauf hinzuweisen, aber ich bin nicht besonders erfahren mit der Silverlight-Plattform. .) Dann müssen Sie eine Datenbank hosten. Wenn beide wichtig sind, dann sehen Sie wahrscheinlich eine Art von Hybrid-Lösung; isolierten Speicher verwenden, falls verfügbar, und dann auf eine Datenbank zurückgreifen.
Mit anderen Worten, ich denke, dass die Bedürfnisse Ihrer Anwendung wichtiger sind als einige abstrakte Best Practices.
Tags und Links c# asp.net persistence preferences silverlight-2.0