2017-02-28 10 views
0

Ich habe gerade Realm entdeckt. Ich denke an ein Architekturdesign, wo es eine iOS-App, eine Mac-App und ein Backend gibt. Die iOS App verfügt über einen Realm (Realm Mobile Platform), der im Backend mit einem Realm verbunden ist. Die iOS App hat einen anderen Realm (Realm Mobile Database). Das Backend verfügt über eine Datenbank zum Speichern von Dateien.Können wir 2 Realms haben?

Hier ist, was ich denke.

Die iOS-App ruft JSON von einer Drittanbieter-API ab, analysiert sie und vergleicht sie mit den Objekten im Realm (dem mit dem Backend verbundenen). Das Material, das nicht im Realm enthalten ist, wird an die Mac-App gesendet, die die entsprechenden Dateien von einer externen Quelle herunterlädt und dann diese Dateien in die Datenbank hochlädt. Die Mac App alarmiert dann die iOS App, die diese Dinge dann in das Realm (das mit dem Backend verbundene) legt. Dies ist der 'update the backend'-Prozess.

Jetzt vergleicht die iOS-App beide Realms miteinander und erhält die Sachen, die nicht im lokalen Realm sind. Anschließend werden die Dateien mithilfe der Verknüpfungen in diesen Bereichsobjekten aus der Datenbank heruntergeladen. Sobald sie heruntergeladen sind, fügt sie diese Objekte zu ihrem lokalen Realm-Speicher hinzu. Dies ist der Vorgang "Gerät mit dem Backend synchronisieren".

Beide Realms würden die gleiche Art von Objekt speichern.

Extra:

Idealerweise funktioniert das Gerät nicht mit der Datenbank in perfekter Synchronisation sein, und so werden die meisten haben wahrscheinlich einige Teilmenge des Back-End-Realm und die Datenbankdateien.

Ist diese Kombination einer Realm-Plattform und einer Realm-Datenbank möglich?

+0

Gibt es einen Grund, dass Sie nicht nur denselben Bereich zwischen den iOS-Apps, der Mac-App und dem Backend teilen? – ast

+0

Hey @ast, yep, um ein Delta zu halten, damit es wissen kann, was es nicht hat, damit es weiß, welche Dinge heruntergeladen werden sollen. –

+0

Wäre es eine gute Idee, den Objekten eine Eigenschaft hinzuzufügen, um zu verfolgen, ob die Dateien heruntergeladen wurden, und Realm dann die Synchronisierung zu überlassen? Sollte den Overhead sehr reduzieren. – ast

Antwort

0

Ja! Das sollte möglich sein. Sie können beliebig viele synchronisierte und unsynchronisierte Realms in einer App haben. Sie müssen nur die Configuration Objekte koordinieren, die Sie verwenden, um sie zu instanziieren.

Es ist möglich, einfach kopieren Realm von einem Reich zum anderen Objekten: obwohl

let objectFromLocalRealm = //... 
let synchronizedRealm = //... 

try! synchronizedRealm.write { 
    sychronizedRealm.create(*objectType*.self, value: objectFromLocalRealm, update: true) 
} 

Wenn Sie diese Methode verwenden, müssen Sie sicherstellen, dass sowohl das Objekt selbst, und alle untergeordneten Objekte in List s machen oder auf andere Weise Verwenden Sie Primärschlüssel oder Sie können mehrere Kopien desselben Objekts im synchronisierten Bereich erstellen.

Der Realm-Test für die Gleichheit prüft, ob zwei Instanzen Object auf die gleiche Backing-Zeile in der Datenbank zeigen. Daher kann der Vergleich von zwei Objekten aus verschiedenen Realms nicht automatisch funktionieren. Möglicherweise müssen Sie eine manuelle Vergleichsmethode implementieren, die überprüft, ob bestimmte Eigenschaftenwerte übereinstimmen.

+0

Danke Tim! Ich habe dein Realm gestern auf YouTube gesehen, also ist es ziemlich surreal, eine Antwort von dir zu bekommen, haha. Prost Kumpel! –

+0

Hey Peter! Hahahaha wirklich? Welches Video war das? Cool! Froh, dass ich dann helfen könnte! Viel Glück mit dem Rest Ihrer App! :) – TiM

+0

Danke Tim :) Das war der eine: https://www.youtube.com/watch?v=QmoOuS1nXh8 Viele gute Lacher! Wirklich tolle Präsentation. Und jetzt liebe ich Realm. Es ist böse. –

Verwandte Themen