Skip to content

Instantly share code, notes, and snippets.

@exallium
Created June 15, 2015 20:02
Show Gist options
  • Save exallium/e72c063c42640ba67ca6 to your computer and use it in GitHub Desktop.
Save exallium/e72c063c42640ba67ca6 to your computer and use it in GitHub Desktop.
rxmvc
package controller
public class Controller {
val editText : RxEditText<User> = // ...
val model : Model<User> = // ...
val modelObserver: Observer<User>? = null
val editTextObserver: Observer<User>? = null
public fun onCreate() {
modelObserver = model.getObserver()
editTextObserver = editText.getObserver()
editText.getObservable().subscribe(modelObserver)
model.getObservable().subscribe(editTextObserver)
}
public fun onDestroy() {
modelObserver?.onComplete()
editTextObserver?.onComplete()
}
}
package model
public class Entity
public data class User(var name: String) : Entity()
public interface Model<T: Entity> {
fun getObservable(): Observable<T>
fun getObserver(): Observer<T>
}
class UserModel : Model<User> {
public fun getObservable(): Observable<User> {
return Observable.create(/* select * from users.... */)
.mergeWith(/* wherever updates should come from */)
}
public fun getObserver(): Observer<User> {
return object : Subscriber<User>() {
/* ... onComplete should unsubscribe ...*/
}
}
}
package view
public class RxEditText<T : Entity> : EditText {
public fun getObservable(): Observable<T> {
// ...
}
public fun getObserver(): Observer<T> {
// ... onComplete should unsubscribe
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment