目前,我正在使用带有Scala(和JavaFX)的EventBus/PubSub架构/模式来实现一个简单的笔记组织应用程序(有点像Evernote客户端,带有一些添加的思维导图功能),我不得不说我真的很喜欢EventBus观察者模式.
以下是一些EventBus库:
https://code.google.com/p/guava-libraries/wiki/EventBusExplained
http://eventbus.org(目前似乎已经失效)这是我在实施中使用的那个.
http://greenrobot.github.io/EventBus/
以下是EventBus库的比较:http://codeblock.engio.net/37/
EventBus与发布 - 订阅模式相关.
但是!
最近,我参加了Coursera的Reactive课程并开始怀疑使用RXJava而不是EventBus是否会在单线程应用程序中简化事件处理代码?
我想问一下关于使用这两种技术(某种eventbus库谁编程的人的经验和某种形式的反应扩展(RX)):是很容易解决的事件处理使用RX复杂性比与事件总线架构给出没有必要使用多个线程?
我问这个,因为我已经在听到无功讲座Coursera是RX(即没有"回调地狱")导致更清洁的代码比使用观察者模式,但是我没有找到VS EventBus架构之间的任何比较RXJava.所以很明显,EventBus和RXJava都比观察者模式更好,但 在代码清晰度和可维护性方面,它在单线程应用程序中更好?
如果我理解正确的话,RXJava的主要卖点是,如果存在阻塞操作(例如,等待来自服务器的响应),它可用于生成响应式应用程序.
但我根本不关心异步性,我所关心的只是在单线程应用程序中保持代码清洁,解开并易于推理.
在这种情况下,使用RXJava比使用EventBus更好吗?
我认为EventBus将是一个更简单,更清晰的解决方案,我认为没有任何理由可以将RXJava用于单线程应用程序,而采用简单的EventBus架构.
但我可能错了!
如果我错了,请纠正我,并解释为什么RXJava在单线程应用程序中没有执行阻塞操作的情况下比简单的EventBus更好.
event-handling reactive-programming system.reactive event-bus rx-java
我正在使用RxJava.
我有一个Observable<T>.我如何将其转换为List<T>?
似乎是一个简单的操作,但我无法在网上的任何地方找到它.
我是反应式编程的新手.所以当我从一个事件创建一个流时遇到问题,比如onClick,ontouch ......
任何人都可以帮我解决这个问题.
谢谢.
我正在学习JavaScript中的反应式编程和功能反应式编程.我很迷茫.
维基百科说,有各种方法来编写反应性代码,如命令式,OORP和功能性.我想知道事件驱动是否只是编写反应代码的另一种方式?
响应式编程如何与Promises相关?我认为承诺是事件驱动和回调地狱的替代品.
这是我试图完成的图片.
--abca - BBB - 一个
分裂成
--a ----- a ------- a - >一个流
---- b ------ bbb --- - > b stream
------ c ---------- - > c stream
然后,能够
a.subscribe()
b.subscribe()
c.subscribe()
Run Code Online (Sandbox Code Playgroud)
到目前为止,我发现的所有内容都使用groupBy()拆分流,但随后将所有内容折叠回单个流并在同一个函数中处理它们.我想要做的是以不同的方式处理每个派生流.
我现在正在做的方式是做一堆过滤器.有一个更好的方法吗?
我正在使用Clean Architecture开发Android应用程序,我正在将其迁移到RxJava 2.x. 我必须向soap服务发出一些网络请求,所以我在域模块中定义了api接口:
public interface SiginterApi {
Observable<User> login(String user, String password);
...
Observable<List<Campaign>> getCampaigns(List<Long> campaignIds);
}
Run Code Online (Sandbox Code Playgroud)
我已经读过网络请求应该用" Flowable"进行,因为背压管理是因为它是'冷可观察'.在另一方面,我知道请求的结果将是成功的(与响应)或错误,所以我不知道我是否应该使用Flowable或Single甚至Observable.
此外,我有这样的数据库访问:
public interface UserRepository extends Repository {
Observable<Void> saveUser(String username, String hashedPassword, boolean logged, User user);
...
Observable<User> findUser(String username, String hashedPassword);
}
Run Code Online (Sandbox Code Playgroud)
我不知道我是否应该使用Completable/ Flowable/ Observable在saveUser方法和Single/ Flowable/ Observable的findUser方法.
我读了Odersky撰写的文章"用Scala.React弃用Observer模式"
github看起来被遗弃了:
https://github.com/ingoem/scala-react
此外,最近的Reactive Programming Coursera类使用了JavaRx Observable库(当然还有Scala支持).
这背后有故事吗?我可以假设scala.react只是没有做得很远.基于Observable的JavaRx库是否可取?或者我们可以期待Typesafe中类似或更好的东西吗?
在ReactiveCocoa中,如果我们链接几个相关信号,我们必须使用subscribeNext:链中的下一个信号来接收先前产生的信号的值(例如,异步操作的结果).所以过了一会儿,代码会变成这样的东西(省略了不必要的细节):
RACSignal *buttonClickSignal = [self.logIn rac_signalForControlEvents:UIControlEventTouchUpInside];
[buttonClickSignal subscribeNext:^(UIButton *sender) { // signal from a button click
// prepare data
RACSignal *loginSignal = [self logInWithUsername:username password:password]; // signal from the async network operation
[loginSignal subscribeNext:^void (NSDictionary *json) {
// do stuff with data received from the first network interaction, prepare some new data
RACSignal *playlistFetchSignal = [self fetchPlaylistForToken:token]; // another signal from the async network operation
[playlistFetchSignal subscribeNext:^(NSDictionary *json) {
// do more stuff with the returned data
}]; …Run Code Online (Sandbox Code Playgroud) 我在我的Android应用程序中使用RxJava,我想从数据库加载数据.
通过这种方式,我创建了一个新的Observable,使用Observable.create()它返回一个列表EventLog
public Observable<List<EventLog>> loadEventLogs() {
return Observable.create(new Observable.OnSubscribe<List<EventLog>>() {
@Override
public void call(Subscriber<? super List<EventLog>> subscriber) {
List<DBEventLog> logs = new Select().from(DBEventLog.class).execute();
List<EventLog> eventLogs = new ArrayList<>(logs.size());
for (int i = 0; i < logs.size(); i++) {
eventLogs.add(new EventLog(logs.get(i)));
}
subscriber.onNext(eventLogs);
}
});
}
Run Code Online (Sandbox Code Playgroud)
虽然它可以正常工作,但我读到使用Observable.create()它实际上并不是Rx Java的最佳实践(参见此处).
所以我用这种方式改变了这个方法.
public Observable<List<EventLog>> loadEventLogs() {
return Observable.fromCallable(new Func0<List<EventLog>>() {
@Override
public List<EventLog> call() {
List<DBEventLog> logs = new Select().from(DBEventLog.class).execute();
List<EventLog> eventLogs = new ArrayList<>(logs.size());
for (int …Run Code Online (Sandbox Code Playgroud) 我有一个关于如何取消订阅可观察量的问题.我有两个代码,我不确定哪个更好.
示例1 - >流完成后取消订阅订阅者:
Subscriber<String> subscriber = new Subscriber<String>() {
@Override
public void onCompleted() {
progressdialog.dissmiss();
unsubscribe();
}
@Override
public void onError(Throwable e) {
progressdialog.dissmiss();
}
@Override
public void onNext(String s) {
// do something with data
}
}
Run Code Online (Sandbox Code Playgroud)
示例2 - >销毁活动后取消订阅订阅:
private void test(){
Subscriber<String> subscriber = new Subscriber<String>() {
@Override
public void onCompleted() {
progressdialog.dissmiss();
}
@Override
public void onError(Throwable e) {
progressdialog.dissmiss();
}
@Override
public void onNext(String s) {
// do something with data
}
};
subscription …Run Code Online (Sandbox Code Playgroud) rx-java ×6
android ×4
java ×2
bacon.js ×1
event-bus ×1
event-driven ×1
frp ×1
ios ×1
javascript ×1
objective-c ×1
rx-android ×1
rx-java2 ×1
rxjs ×1
scala ×1