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
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.
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.
- 1. non così pulita Architettura
- 2. Architettura pulita - Robert Martin - Use Case Granularity
- 3. Architettura pulita - Robert Martin - Come collegare casi d'uso
- 4. Modello di architettura pulito Android
- 5. Android View.onDraw() ha sempre una tela pulita
- 6. Come comprendere l'architettura pulita di VIPER?
- 7. Come aggiungere un'attività pulita - Attività "pulita" non trovata
- 8. Architettura Visual Studio 2015 Android NDK
- 9. Architettura Bluez: Spiega questa architettura
- 10. L'ultimo pulita funzione/secure
- 11. Mono per Android - Architettura supportata - Drop x86?
- 12. Errore NDK-generazione pulita
- 13. differenza tra directory di lavoro pulita e pulita in Eclipse WTP con Tomcat
- 14. implementazione veloce, pulita, C, timsort?
- 15. Architettura plug-in in .NET
- 16. impostazioni Xcode: architettura vs architettura valida
- 17. Architettura spaziale?
- 18. Architettura codice cross platform C++
- 19. Impossibile installare therubyracer su installazione pulita di Yosemite e versione pulita di ruby
- 20. Simboli indefiniti per architettura x86_64: quale architettura dovrei usare?
- 21. Scrittura pulita, codice performante per l'iPhone
- 22. Soluzione pulita per questo trucco furioso iteratore?
- 23. Architettura software contro architettura Enterprise, quando viene utilizzata?
- 24. rpmbuild% Fase pulita senza rimuovere i file
- 25. L'istanza di attività AndroidState viene pulita durante l'aggiornamento dell'app?
- 26. mancante richiesta architettura ARMv7
- 27. Spark Filati Architettura
- 28. jQuery Architettura MVC
- 29. Architettura di progetto flessibile?
- 30. processore errore architettura disadattamento
Non sono sicuro se la mia comprensione è corretta, significa che i miei soggetti di livello dati devono ereditare da RealmObject? – Signcodeindie
Sì, dal momento che sarebbe il tuo livello dati che cosa sarebbe responsabile per il salvataggio e la memorizzazione dei dati di Realm –
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