Ich habe gerade angefangen, mit Realm for Swift zu arbeiten. Nachdem ich die Dokumentation gelesen habe, habe ich noch ein paar Fragezeichen im Kopf.
Mein größter ist, wenn es eine Best Practice für die Trennung von Modellklassen aus Realm-Klassen gibt.
Zum Beispiel haben wir in Java MVC-Projekten DAO-Klassen (Data Access Object-Klassen) verwendet, die für die Kommunikation mit der Datenbankschicht verantwortlich waren. Unsere entsprechenden Modellklassen haben entweder nur das Dao-Objekt injected oder wir haben hierfür Serviceklassen verwendet (wie CRUD-Operationen).
Wenn ich eine Realm "Model" -Klasse habe, scheint dies jetzt alles in einem zu sein. Nachdem das Objekt in der Datenbank gespeichert wurde, führt das Ändern der Attribute des Objekts in der UI-Ebene zu
'Versuch, ein Objekt außerhalb einer Schreibtransaktion zu ändern - Aufruf beginWriteTransaction zuerst auf einer RLMRealm-Instanz. '
Was mich zu meiner ursprünglichen Aussage zurückbringt: Sollte dies nicht in Realm-Objekten und Modell-Objekten getrennt sein. Oder ist es in Ordnung, "realm.write" -Prozesse in View-Klassen zu haben?
Ich habe etwas darüber recherchiert, aber die Ergebnisse sind sehr vage darüber.
Wie gehen Sie in Ihren Projekten damit um? Haben Sie eine Art Best Practice oder Anleitung?
Vielen Dank im Voraus John
Offiziell (zumindest auf der iOS-Seite) gibt es keine bewährte Methode, die Modellklassenlogik von den tatsächlichen Realm-Objekt-Unterklassen zu abstrahieren. Nichtsdestotrotz habe ich in der Vergangenheit definitiv von Apps gehört, die diese Art von Logik verwenden, um verschiedene Arten von Datenrahmen zu unterstützen.
Wenn ich dies tun würde, würde ich für jedes Modell, das meine eigene API implementiert, eine separate Objektklasse für das Abrufen / Festlegen von Dateneigenschaften erstellen und das Realm-Objekt zu einem internen Mitglied dieses Objekts machen. Dieses Objekt würde dann als generische Schnittstelle zwischen der Logik meiner App und dem Speichern dieser Daten in Realm dienen. Auf diese Weise könnte ich, wenn ich das Datenframework auf der ganzen Linie austauschen möchte, einfach mein eigenes Datenobjekt durch ein neues ersetzen, aber die API konsistent halten.
In Bezug auf diese Fehlernachricht, die Sie gepostet haben, können Sie ein Realm-Objekt (UI-Thread oder anderes) nicht ändern, es sei denn, es befindet sich in einer Schreibtransaktion. Davon abgesehen könnten Sie diese Logik ziemlich einfach innerhalb dieses abstrakten Objekts kapseln (d. H. Eine Realm-Schreibtransaktion für den aktuellen Thread öffnen).