Ich suche nach Mustern in bestehenden iOS-Apps (Swift bevorzugt, aber ich denke, es spielt keine Rolle), um einige Ideen zum Umgang mit Modellen zu erhalten Firebase (oder eine beliebige NoSQL DB). Die Komplikation beruht auf 1) der Art und Weise, in der Firebase auf Änderungen an Daten wartet, und 2) dem Beibehalten der DB-Anforderungslogik aus den Modellen.Muster für den Umgang mit Firebase-Modellen mit Beziehungen (iOS)
Also lassen Sie uns sagen, dass ich so etwas wie dieses:
struct User {
let name: String
let checkin: Checkin
}
struct Checkin {
let name: String
let coordinates: Double
}
Nun, wenn ich entscheiden, ich will Daten in meiner Ansicht-Controller, ich werde wie Database.database()..reference()...
etwas tun, und eine Methode für mein Modell haben analysieren, um die JSON und fügen Sie es in das Modell ein. Was passiert nun, wenn es zu einer Beziehungseigenschaft kommt (in diesem Fall checkin
beim Erstellen einer Instanz von User
)? Wenn ich das vollständige Benutzermodell mit allen untergeordneten Beziehungen haben möchte, werde ich nur etwas wie { checkin: someRandomCheckinId }
von Firebase zurückbekommen. I könnte einen anderen Anruf machen, um die Eincheck-ID zu bekommen, aber ich würde diese Logik in meinem Modell tun müssen, wenn die Daten von Firebase zu analysieren, die nicht ideal scheint - es scheint, dass Logik am besten auf der VC gehört (oder eine separate Datenmanagerklasse, die vom VC aufgerufen wird). Gibt es einen besseren Weg?
Außerdem möchte ich in der Lage sein, Änderungen zu hören, da es ein Hauptmerkmal von Firebase ist. Ich kann mir nicht vorstellen, mein Modell mit einem Haufen Zuhörer zu verschmutzen, ist eine gute Sache.
Alle Beispiele von Repos mit einem guten Muster dafür wäre großartig, um meinen Kopf um eine geeignete Lösung zu wickeln. Danke im Voraus!
Hallo Matt, danke, dass du dir die Zeit genommen hast zu antworten.Vertrau mir, ich habe die gesamte Dokumentation von Firebase schon viele Male gelesen (es gibt wirklich nicht so viel). Ich stimme Ihnen/Firebase bezüglich der Verflachung von Datenstrukturen zu, aber hier kommen viele der Probleme ins Spiel. Ich verstehe die SOLID-Prinzipien und deshalb habe ich die Frage gestellt. Aus Gründen der Einfachheit habe ich gerade gesagt, dass meine Datenanrufe auf dem VC waren, aber sie sind tatsächlich in einer separaten Klasse, die allein für Daten verantwortlich ist. Ich verstehe, dass dies auf NoSQL/OO erweitert werden kann, aber es gibt sicherlich Firebase-spezifische Komplikationen. – SeeMeCode
Hallo, ich würde sagen, dass die Komplikationen genauso anwendungsspezifisch sind wie firebasenspezifisch. Anstatt darüber nachzudenken, wie andere Leute es tun oder wie Firebase "verwendet" werden soll, würde ich allgemeiner darüber nachdenken, was Sie erreichen wollen und wie Sie es mit den Werkzeugen, die Sie haben, erreichen können. – Matt
Offensichtlich wollen Sie Ihre Funktionalität, aber Sie können auch Dinge wie eine minimale Ansicht Controller und eine geringe Kopplung zwischen Datenzugriff und Anwendungslogik wollen. Denken Sie über Ihre Möglichkeiten nach und wählen Sie diejenige aus, die am sinnvollsten für Ihre speziellen Ziele ist. Das wird höchstwahrscheinlich nicht die beste Option für andere Leute und ihre Projekte sein, und es könnte Kompromisse geben, die Sie nicht vermeiden können. – Matt