Ascolta le modifiche dei dati (base) usando Clean Architecture

6

Il nostro team sta creando un'app per Android che utilizza Kotlin (se questo è importante) seguendo le linee guida descritte dallo zio Bob (Robert Martin).

Il modello di presentazione che usiamo è MVI . Abbiamo relatori che comunicano con Use Cases / Interactors e convertono gli oggetti entità risultanti in ViewModels, adatti per il rendering dalla vista.

Utilizziamo un DB reattivo (Realm) per l'archiviazione. Tutte le comunicazioni Visualizza - > Presenter viene eseguito tramite RxJava2 e RxBinding.

Ora, per la parte interessante. Il database reattivo consente di ascoltare il cambiamento tramite ascoltatori o Osservabili. La seconda opzione è davvero facile da usare. Ma, non voglio usare RxJava nel nostro UseCase / Interactor, voglio che dipendano il più possibile da stdlib . Ovviamente, possiamo avvolgere le loro operazioni in Observables ed eseguirle su un thread in background.

Ho visto molte implementazioni che utilizzano RxJava in profondità nella loro logica di business. Beh, non è solo sbagliato? Tutti questi "operatori" ti fanno affidamento su di loro e ignorano totalmente la potenza della lingua che stai utilizzando.

Quindi, la mia domanda si riduce a questo: è possibile ascoltare le modifiche da un database reattivo senza utilizzare Observables o Listener quando si esegue una query? Le coroutine (o qualcos'altro) sono un'opzione qui?

    
posta curiousily 12.09.2017 - 10:25
fonte

1 risposta

2

I've seen many implementations that use RxJava deep into their business logic. Well, isn't that just wrong?

Certamente non segue i consigli di Clean Architecture. Il DB è un plugin. Anche un DB che finge di essere un sistema di accodamento è un plug-in. Dovrebbe essere gestito tutto al di fuori della logica aziendale, quindi nessuna logica aziendale lo sa direttamente.

So, my question comes down to this: Is it possible to listen for changes from a reactive database without using Observables or Listeners when querying it?

Usalo nel modo in cui è pensato per essere usato. Basta fare così lontano dalle tue regole aziendali.

    
risposta data 12.09.2017 - 10:51
fonte

Leggi altre domande sui tag