2016-05-07 17 views
5

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

2

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.

+0

Ich bin nicht sicher, ob mein Verständnis richtig ist, ist, dass meine Datenschicht Entitäten aus RealmObject erben müssen bedeuten, zu? – Signcodeindie

+0

Ja, da es Ihre Datenschicht wäre, was für das Speichern und Speichern von Realm-Daten verantwortlich wäre –

+0

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

0

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.

Clean Architecture

Verwandte Themen