2016-05-07 6 views
5

Sto valutando RealmDb, credo che RealmDb sia strettamente associato al livello del modello. Il che mi fa sentire se domani dovrò sostituire con un altro database locale piuttosto che un enorme sforzo di refactoring.
La mia domanda è come ottenere un'architettura pulita con RealmDB? Qualche esempio che posso seguire?RealmDb: architettura pulita in Android

risposta

2

Realm semplifica semplicemente il riutilizzo dei modelli di database come modelli di visualizzazione, se lo si desidera. Ma non c'è nulla che ti impedisca di avere entità di livello dati e di visualizzare le entità di livello e quindi eseguire la mappatura sui limiti.

E.g.

// 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 molti casi è molto probabile che si tratti di overkill, ma vi darà la separazione desiderata.

+0

Non sono sicuro se la mia comprensione è corretta, significa che i miei soggetti di livello dati devono ereditare da RealmObject? – Signcodeindie

+0

Sì, dal momento che sarebbe il tuo livello dati che cosa sarebbe responsabile per il salvataggio e la memorizzazione dei dati di Realm –

+0

Con questo approccio, che cosa è la migliore pratica ** l'aggiornamento ** di un modello già persistente? Posso semplicemente chiamare 'fromViewModel' ed eseguire un' realm.insert (fooEntity) '? O devo prima eseguire un 'findById' e poi chiamare i setter sull'oggetto recuperato all'interno di una transazione? – einsA

0

Esistono diverse architetture in cui l'obiettivo principale è isolare il dominio della nostra applicazione dei framework come Clean Architecture, Onion Architecture, Hexagonal Architecture.

Per ottenere questo isolamento, i dettagli di implementazione sono nascosti come livello dati. Un limite o una porta sono definiti nel livello del dominio che definisce il modo in cui i dati memorizzati sono accessibili ma senza sapere come sono memorizzati, il modello di repository viene solitamente utilizzato per implementare questo requisito di architettura.

Con questi requisiti avremo generalmente un modello di persistenza e entità di dominio differenziate. I modelli di persistenza possono e dovrebbero essere accoppiati al framework che stiamo usando, ad esempio il Realm.

Lascio uno schema in cui è possibile comprenderlo meglio graficamente.

Clean Architecture