Ich evaluiere RealmDb, ich fühle, RealmDb ist eng mit Model-Layer gekoppelt. Das lässt mich fühlen, wenn ich morgen mit einer anderen lokalen Datenbank ersetzen muss, als es eine riesige Refactoring-Bemühung ist.
Meine Frage ist, wie man saubere Architektur mit RealmDB erreicht? Irgendwelche Beispiele, denen ich folgen kann?RealmDb: Saubere Architektur in Android
Antwort
Realm vereinfacht die Wiederverwendung Ihrer Datenbankmodelle als Ansichtsmodelle, wenn Sie möchten. Aber es gibt nichts, was Sie davon abhält, Datenschicht-Entitäten und Layer-Entitäten anzuzeigen und dann die Zuordnung an den Grenzen durchzuführen.
z.
// Data layer
public class FooEntity extends RealmObject {
// Realm fields and methods...
public static FooEntity fromViewModel(FooViewModel viewModel) {
// Convert to entity
}
public static FooViewModel toViewModel(FooEntity entity) {
// Convert to view model
}
}
// View layer
public class FooViewModel {
// Standard POJO used by the View layer
}
In vielen Fällen ist das wahrscheinlich Overkill, aber es wird Ihnen die Trennung geben, die Sie wollen.
Es gibt verschiedene Architekturen, bei denen das Hauptziel darin besteht, die Domäne unserer Anwendung der Frameworks als saubere Architektur, Zwiebelarchitektur, sechseckige Architektur zu isolieren.
Um diese Isolierung zu erreichen, sind die Implementierungsdetails als Datenschicht verborgen. Eine Grenze oder ein Port ist in der Domänenschicht definiert, die definiert, wie auf die gespeicherten Daten zugegriffen wird, aber ohne zu wissen, wie sie gespeichert sind, wird das Repository-Muster normalerweise verwendet, um diese Architekturanforderung zu implementieren.
Mit diesen Anforderungen werden wir in der Regel ein Persistenzmodell und eine differenzierte Domäneneinheit haben. Persistenzmodelle können und sollten mit dem Framework verbunden werden, das wir beispielsweise für Realm verwenden.
Ich hinterlasse ein Diagramm, wo Sie es grafisch besser verstehen können.
- 1. Saubere Architektur Interaktor-Implementierung
- 2. Verwirrt Ausdruck Interacter in saubere Architektur
- 3. Saubere Architektur und die Verwendung eines ORM
- 4. Wie kann man die saubere Architektur von VIPER verstehen?
- 5. Generischer ID-Typ für "Saubere Architektur" Go-Programm
- 6. Saubere Architektur - Robert Martin - So verbinden Sie Anwendungsfälle
- 7. Newbie Android Architektur Abfrage
- 8. Android-Architektur-Nutzung?
- 9. Android gute Architektur
- 10. Über Android-Architektur?
- 11. Android View.onDraw() hat immer eine saubere Canvas
- 12. Saubere Geschichte (aktuelle Ordner) in Android 5+ Verzeichnisbaum Picker (ACTION_OPEN_DOCUMENT_TREE)
- 13. Übergabe des RealmDB-Ergebnisobjekts als Swift 2-Funktionsparameter
- 14. Saubere Leinwand in kivy Sprache
- 15. Saubere Benutzer HTML in .net
- 16. Visual Studio 2015 Android NDK ARM-Architektur
- 17. Allgemeine Architektur für Offline-Synchronisierung Android-Apps
- 18. Android Smartphone Prozessor Architektur x64 vs x86
- 19. Serviceorientierte Architektur vs ressourcenorientierte Architektur
- 20. eine bessere parallele Architektur in Python Wahl
- 21. Django formt saubere Daten
- 22. saubere URL onClick Problem
- 23. Testing InlineFormset saubere Methoden
- 24. CMake benutzerdefinierte saubere Befehle
- 25. Regulärer Ausdruck saubere Ergebnisse
- 26. Saubere baut mit Workflow-
- 27. Saubere Daten Tweets
- 28. modelform: überschreiben saubere Methode
- 29. Android NDK: So erhalten Sie Compiler-Architektur in Android.mk dynamisch
- 30. Verwendung der CLEAN-Architektur in Android mit Parceler
Ich bin nicht sicher, ob mein Verständnis richtig ist, ist, dass meine Datenschicht Entitäten aus RealmObject erben müssen bedeuten, zu? – Signcodeindie
Ja, da es Ihre Datenschicht wäre, was für das Speichern und Speichern von Realm-Daten verantwortlich wäre –
Mit diesem Ansatz, was ist die beste Vorgehensweise ** ein bereits bestehendes Modell zu aktualisieren **? Kann ich einfach 'fromViewModel' aufrufen und eine' realm.insert (fooEntity) ''? Oder muss ich zuerst eine "findById" ausführen und dann die Setter auf dem abgerufenen Objekt innerhalb einer Transaktion aufrufen? – einsA