2010-12-22 7 views
6

Ich fragte mich, ob jemand irgendwelche Entwurfsmuster, Artikel oder andere Informationen für das Problem der Synchronisierung von Einstellungen zwischen mehreren Geräten kannte.Gibt es Entwurfsmuster für die Konfigurationssynchronisierung?

Sagen Sie eine Website, eine iPhone App und eine iPad App; mit zukünftigen Geräten, die später kommen.

Alle Informationen würden sehr geschätzt werden. Wenn Sie mehr Informationen benötigen, um richtig zu antworten, sagen Sie das bitte und ich kann das Problem näher erläutern.

+0

Meinst du * Anwendungseinstellungen * für eine Anwendung, die sowohl online als auch als verfügbar ist native Anwendung auf verschiedenen Geräten?Wenn nicht, über welche Art von * Einstellungen * redest du? Wenn ja, um welche Art von Anwendung handelt es sich, und möchten Sie nur "Einstellungen" (vermutlich eine kleine Anzahl einfacher Datenobjekte) oder komplexere Anwendungsdaten synchronisieren? – Ergwun

+0

Ja Anwendungseinstellungen wie mehrere 'Likes' und 'Abneigungen' von verschiedenen Dingen recht einfache Objekte Strings im Grunde. In einer Verbraucher-App, die auf verschiedenen Online- und Offline-Geräten verfügbar ist. Etwas wie MobileMe oder Google Sync. Es kann nicht garantiert werden, dass ein Gerät jeden Tag online ist und synchronisiert wird. Die Dinge werden auf jedem Gerät hinzugefügt und gelöscht. – Dan

Antwort

2

Sie kann diese link für den Sync ML-Standard folgen. Dies kann Ihnen eine Vorlage geben, um das Framework zu erweitern, um mehr Daten und Einstellungen zu berücksichtigen, die noch nicht bearbeitet wurden. This - gibt Details zu einem Open-Source-Synchronisations-Framework an

+0

OpenSync, obwohl für eine spezifischere Rolle entwickelt, ist allgemein genug im Konzept, um meine Ideen zu überprüfen. Vielen Dank. Ich bin mir nicht sicher, ob ich den Code aufgrund von Komplexität und Abhängigkeiten selbst verwenden kann, aber es ist eine ideale Sache, um darüber zu lesen. Danke, du bist der Gewinner :-) – Dan

1

Verzeihen Sie mir, wenn das folgende zu allgemein erscheint, aber ich habe versucht, es hoch zu halten, damit es in Übereinstimmung mit Ihrer Frage fällt. Ich weiß nicht, ob das, wonach du suchst, ein "Designmuster" an sich wäre. Es klingt, als ob Sie nach einem Synchronisationsparadigma/-system suchen. Beachten Sie, dass ich in dieser Antwort davon ausgehe, dass Sie sowohl Online- als auch Offline-Funktionen für Ihre Anwendung benötigen (da Sie explizit von der Synchronisierung gesprochen haben). Wenn ich mich irre, lassen Sie es mich wissen.

Insbesondere das, was Sie wahrscheinlich suchen, wird in der Regel mit zwei Dingen implementiert: 1) eine "verteilte" Datenbank, die offline auf den Client-Anwendungen wie den mobilen Apps, sowie auf allen Servern funktioniert) und 2) einen Synchronisations- und Konfliktlösungsmechanismus.

Ein sehr gutes Beispiel dafür ist das Quellcodeverwaltungstool Git. Git hat beide der oben genannten Eigenschaften. Erstens verwendet es eine Datenbank (z. B. das Dateisystem eines Git-Projekts), die verteilbar ist (z. B. kann das Projekt von einer Entwickler-Workstation zu einer anderen kloniert und unabhängig bearbeitet werden). Zweitens hat es einen Mechanismus zur Synchronisation und Konfliktlösung. Das heißt, wenn ich versuche, Änderungen von der Arbeitsstation eines Kollegen zu synchronisieren (z. B. automatisch oder manuell), können die Unterschiede zwischen Code und Code zusammengeführt werden.

Ein anderes Beispiel, vielleicht sogar relevanter Ihre Anwendung ist Evernote. Wenn ich mich nicht irre, verwendet Evernote die gleiche Art von Paradigma (eine Flat-File-Datenbank), um Dokumente zu synchronisieren, und hat Desktop-Clients, eine Website und mobile Clients.

Dies bedeutet nicht, dass Sie eine Flat-File-Datenbank verwenden müssen. Sie können genauso gut eine relationale oder andere Datenbank verwenden. Abhängig von der Art der Daten, die Sie speichern und synchronisieren möchten, können Sie möglicherweise mit einer sehr einfachen Konfliktlösung fertig werden. (Wenn Sie beispielsweise nur Statusaktualisierungen, Stimmenzählungen usw. speichern, wählen Sie vielleicht nur den neuesten Eintrag in der Datenbank aus.)

Kurz gesagt, scheinen die Tools, die ich erwähnt habe, dieser Art zu folgen workflow:

  1. Wenn Sie eine Sitzung in der Client-Anwendung starten, synchronisieren oder "aktualisieren" Sie den Client, indem Sie online gehen und neue Daten abrufen. Hier identifizieren und lösen Sie Konflikte zwischen den Daten auf dem Client und den Daten auf dem Server oder der Cloud.
  2. bearbeiten oder erstellen, um Daten "offline" auf dem Client, sei es auf der Website, mobile app etc.
  3. synchronisieren oder "update" die Wolke, indem Sie online und drücken Sie die Daten
  4. geändert
+0

Genau richtig. Aber ich suchte nach einem Entwurf für ein System, um genau das zu erreichen, was Sie erwähnen; Sei es ein "Muster" oder Links zu Artikeln, in denen Menschen die verschiedenen Methoden zum Erreichen eines solchen Systems mit den damit verbundenen Vor- und Nachteilen besprochen haben. Wissen Sie von irgendetwas oder von irgendwo, dass diese Information sein könnte? – Dan

+0

Ich sollte hinzufügen, dass ich einige Zeit damit verbracht habe und im Internet nachgesehen habe und nichts finden konnte, aber ich habe ein paar mögliche Lösungen für das Problem, aber ich hoffte jemanden mit etwas mehr Erfahrung in diesem Bereich und wer hat schon das Problem gelöst ist, kann in der Lage zu verifizieren, was ich gelernt habe oder eine Methode vorschlagen, die ich noch nicht gedacht hatte – Dan