SQLite.swift: Die beste Methode zum Implementieren von Modellklassen, die Zeilen einer bestimmten Tabelle darstellen?

8

Dies ist nur die Frage, die ich bisher gestellt habe und die nicht viel / keine Erklärung benötigt.

Ich hatte so weit mit dem Lösen davon:

  • Jede Klasse könnte eine initialiseTable() Art von Like-Funktion haben, die aufgerufen würde, wenn das DB-Schema initialisiert wird?
  • Statische Konstanten in jeder Klasse für die Spalte Expression<T>

Ich denke, der Teil, über den ich am meisten nachdenke, füllt Instanzen von Modellklassen mit Query Ergebnissen.

Wie immer, danke im Voraus für Hilfe:)

Link zur ehrfürchtigen SQLite.swift für diejenigen, die über sie noch nicht gekommen sind.


Update (22/4/15 14:13):

darüber nach zu denken, ich bin nicht sicher Zeilendaten in Ivars zu speichern, wie es zum Training Einsparung und Aktualisierung der Logistik und verkomplizieren die Dinge heikel werden kann.

Ich denke aber immer noch, dass Modellklassen zur Darstellung von Zeilen eine gute Idee sind. Ich denke, der Hauptvorteil von Modellklassen, die Tabellenzeilen darstellen, ist Sicherheit. Wissen, dass ein Query zum Beispiel die Spalte name : Expression<String> hat. Das ist toll zu haben, wenn Sie Query Instanzen zwischen den Klassen übergeben

Wie ich schon sagte, bin ich mir nicht sicher, ob man wirklich eine Klasse erstellen möchte, die iVars für jede Spalte hat, um Zeilen darzustellen. Wenn Sie das tun, könnten Sie anfangen, in ORM Land zu gelangen, was meiner Meinung nach die simple Schönheit von SQLite.swift entfernt. Der einzige Vorteil, den ich, indem Ivars für jede Spalte denken kann, wäre, dass Sie refresh() auf einer Instanz nennen könnte, welche die neuesten Daten aus der DB abrufen würde, und dann alle anderen Objekte auf diese Instanz zeigen die neuesten Daten müssten ohne selbst die DB zu treffen.

Vielleicht haben Sie nur eine Klasse, die Query ableitet und einen Konstruktor hat, der eine Datenbank akzeptiert und mit dem korrekten Tabellennamen initialisiert? Vielleicht könnte das irgendwie für Zeilenkolonnen gettern.

Ich denke nur laut nach, um etwas nachzudenken. Diese Ideen sind ziemlich unreif und jung, ich denke nur über die Grenzen und Vorteile in meinem Kopf jedes Ansatzes nach, den Sie ergreifen könnten. Werde zurückkommen und mehr hinzufügen / ändern, wenn ich die Ideen verfeinert habe.


Update (24/4/15 09:45):

Vielleicht sollten die Modellklassen nur Proxies für die DB-Tabellen sein? Jede Klasse hat einen Setter für jedes Feld, das sofort in die DB schreibt, so dass es keinen Konflikt im Zustand gibt, da es immer spiegelt, was in der DB ist. Aber dann wären Sie nicht in der Lage zu verwalten, wie oft Sie so einfach in die DB gehen? ABER. Änderst du Werte wirklich oft?

    
kylejm 21.04.2015, 13:06
quelle

1 Antwort

2

Zur Kasse Ссылка . Es bietet eine vorgefertigte Record-Klasse sowie fokussierte Protokolle, die Abruf- und Persistenzmethoden für jede benutzerdefinierte Struktur oder Klasse ermöglichen:

%Vor%

Update: GRDB ist eine Protokoll-orientierte Bibliothek, was bedeutet, dass sie unveränderliche Modelle bevorzugt. Dies ist ganz anders als bei Core Data oder Realm, und es gibt Konsequenzen für das Anwendungsdesign. Schau dir an, wie man ein iOS baut Anwendung mit SQLite und GRDB.swift

    
Gwendal Roué 05.07.2015 17:50
quelle

Tags und Links