FMDB Wrapper VS Kerndaten: Was ist einfacher zu verwenden und zu pflegen? [geschlossen]

7

FMDB Wrapper VS Kerndaten: was ist einfacher zu verwenden & amp; beibehalten?

Ich bin verwirrt, weil FMDB sehr alt ist, aber immer noch viele Entwickler es verwenden, während Core Data neu ist und nur von 3.0 und später sdk unterstützt wird.

Einige haben gesagt, dass FMDB einfach zu bedienen ist und einige Core Data. Bitte hilf mir, damit ich in die richtige Richtung gehen kann.

Vielen Dank im Voraus

    
freelancer 17.12.2011, 05:23
quelle

3 Antworten

19

Ich habe jetzt beide für eine Menge Projekte verwendet.

FMDB ist sehr einfach, wenn Sie SQL kennen, kann es sogar ziemlich einfach zu bedienen sein. Was Sie jedoch während des Lebenszyklus einer App während der Änderung des Datenmodells tun müssen, ist:

  1. Ändern Sie das Datenmodell, normalerweise mit etwas wie Base
  2. Ändern Sie den SQL-Code, um Modelländerungen widerzuspiegeln
  3. Ändern Sie Datenobjekte, um Modelländerungen widerzuspiegeln
  4. Fügen Sie Code in die App ein, um den Fall zu behandeln, in dem Sie älter sind Datenbank.

Was Core-Daten in den Lebenszyklus bringen, ist dies:

  1. Datenmodell und Objekte werden mit derselben Aktion geändert (ich bin Angenommen, Sie generieren Datenobjekte mit mogenerator ).
  2. Einfachere Visualisierung des Datenmodells.
  3. Ermutigt das Durchblättern von Datenmodellen, indem Sie darüber nachdenken inverse Beziehungen.
  4. Oft reicht die automatische Migration aus, um durch ein einfaches Modell zu gelangen Änderungen, ohne die Datenbank von Grund auf neu erstellen zu müssen.
  5. Core Data bietet einige iCloud-Integration über NSManagedDocument.

Die Hölle, die Core Data durchmacht, ist:

  1. Das Löschen ist fehlerhaft, da jeder Zugriff auf Eigenschaften in einem gelöschten Objekt möglich ist löst eine Programmausnahme-Ausnahme aus.
  2. Hintergrund-Thread-Datenzugriff ist nervtötend, weil Core Data es schafft komplex, um mit mehreren Threads richtig zu arbeiten - Sie können nicht für Verwenden Sie beispielsweise ein Datenobjekt, das Sie aus einem Kontext in einem Thread erhalten haben in einem anderen Thread. So viel zum einfachen Übergeben von Objekten Hintergrundfäden für die Arbeit mit ...
  3. Es gibt so viel Magie, die um eure Daten wirbelt, WENN die Dinge gehen falsch, es wird schrecklich frustrierend sein, herauszufinden, was zu tun ist mach das.
  4. Core Data scheint furchtbar zerbrechlich zu sein, Dinge wie die gelöschten Objekte, die Ausnahmen auslösen, die Verwendung der falschen thread-wowing-Ausnahmen, Validierungen, die Ausnahmen auslösen oder das ganze Modell, das nach einer scheinbar einfachen Änderung verschwindet, sind alle Möglichkeiten.

Also, was würde ich empfehlen? Um das alte Zitat von Demokratie zu paraphrasieren, sind Kerndaten das schlechteste Datenpersistenzsystem - mit Ausnahme aller anderen. Selbst mit der neuen Definition von Schmerz und Leid, die Core Data in Ihr Leben bringt, ist es immer noch weniger Arbeit und einfacher zu arbeiten als FMDB oder andere Datenpersistenzschichten.

FMDB ist einfacher und wenn Sie in Ordnung sind, legen Sie viel Zeit in Änderungen und die Definition von Datenmodellen, die in Ordnung sein können. Aber generell würde ich Leuten empfehlen, in den sauren Apfel zu beißen und Kerndaten zu verwenden, es sei denn, es gibt einen klaren Grund, dies nicht zu tun.

Ein paar kurze Tipps:

  • Löschen Sie niemals etwas in den Core-Daten, während die Benutzeroberfläche aktiv ist Zugriff auf Objekte.
  • Wenn möglich, behandeln Sie die Datenbank als Disposable und können Sie sie wiederherstellen Inhalt, so dass, wenn Automigration nicht funktioniert, der Benutzer immer noch starte die App.
  • Behalte alle Core Data Aktivitäten im Hauptthread und lege nur die Hintergrund als letztes Mittel.
  • Verwenden Sie in keinem Fall Core-Data-Validierungen, oder deaktivieren Sie das Kontrollkästchen "optional" für Box-Felder in Ihren Entitäten. Was würdest du lieber haben, einen schlechten Wert in dein Modell einbringen, der womöglich komisch angezeigt wird oder die App einfach abstürzt?
  • Verwenden Sie mogenerator , um Datenobjekte aus Ihrem Modell zu generieren. Sie gibt Objekte aus, die direkt an das Modell gebunden sind, das die Neugenerierung ändern kann, und eine Ebene von Objekten, die über "leer" beginnen, denen jedoch benutzerdefinierte Logik um die Datenobjekte hinzugefügt werden kann und die nicht geändert wird wenn die unteren Objekte neu generiert werden.
Kendall Helmstetter Gelner 17.12.2011, 06:45
quelle
0

Wenn Sie keine spezifischen Projektanforderungen haben, würde ich Core Data verwenden. Apple verbessert es ständig und hat es für das iPhone optimiert.

    
Eric 17.12.2011 05:50
quelle
0

FMDB Wrapper ist einfacher einzurichten (Sie können nur Daten in Ihre SQLite db über FireFox Plugin SQLitemanager oder verwenden Sie einen anderen SQLITE MANAGER, um Ihre Datenbank zu füllen), einfacher zu debuggen (Sie können tatsächlich in Echtzeit sehen, was sich ändert Ihre Datenbank), einfacher zu verstehen, einfacher zu lernen, einfacher zu portieren (im Web oder Android). Core Data ist ein schlecht konstruierter, schlecht implementierter, schlecht dokumentierter, extrem unintelligenter Riesenklug.

    
honestabe 14.09.2015 09:41
quelle

Tags und Links