标签: reactive-programming

EventBus/PubSub vs(反应式扩展)RX关于单线程应用程序中的代码清晰度

目前,我正在使用带有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与发布 - 订阅模式相关.

但是!

最近,我参加了CourseraReactive课程并开始怀疑使用RXJava而不是EventBus是否会在单线程应用程序中简化事件处理代码?

我想问一下关于使用这两种技术(某种eventbus库谁编程的人的经验某种形式的反应扩展(RX)):是很容易解决的事件处理使用RX复杂性比与事件总线架构给出没有必要使用多个线程

我问这个,因为我已经在听到无功讲座CourseraRX(即没有"回调地狱")导致更清洁的代码比使用观察者模式,但是我没有找到VS EventBus架构之间的任何比较RXJava.所以很明显,EventBus和RXJava都比观察者模式更好,但 在代码清晰度和可维护性方面,它在单线程应用程序更好

如果我理解正确的话,RXJava的主要卖点是,如果存在阻塞操作(例如,等待来自服务器的响应),它可用于生成响应式应用程序.

但我根本不关心异步性,我所关心的只是在单线程应用程序中保持代码清洁,解开并易于推理.

在这种情况下,使用RXJava比使用EventBus更好吗?

我认为EventBus将是一个更简单,更清晰的解决方案,我认为没有任何理由可以将RXJava用于单线程应用程序,而采用简单的EventBus架构.

但我可能错了!

如果我错了,请纠正我,并解释为什么RXJava在单线程应用程序中没有执行阻塞操作的情况下比简单的EventBus更好.

event-handling reactive-programming system.reactive event-bus rx-java

37
推荐指数
2
解决办法
1万
查看次数

将observable转换为list

我正在使用RxJava.

我有一个Observable<T>.我如何将其转换为List<T>

似乎是一个简单的操作,但我无法在网上的任何地方找到它.

java reactive-programming rx-java

37
推荐指数
4
解决办法
3万
查看次数

如何从OnClick事件Android创建一个Observable?

我是反应式编程的新手.所以当我从一个事件创建一个流时遇到问题,比如onClick,ontouch ......

任何人都可以帮我解决这个问题.

谢谢.

android reactive-programming rx-java

36
推荐指数
4
解决办法
3万
查看次数

反应式编程与事件驱动编程有何不同?

我正在学习JavaScript中的反应式编程和功能反应式编程.我很迷茫.

维基百科说,有各种方法来编写反应性代码,如命令式,OORP和功能性.我想知道事件驱动是否只是编写反应代码的另一种方式?

响应式编程如何与Promises相关?我认为承诺是事件驱动和回调地狱的替代品.

javascript event-driven frp reactive-programming bacon.js

36
推荐指数
3
解决办法
2万
查看次数

将Rx Observable拆分为多个流并单独处理

这是我试图完成的图片.

--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()拆分流,但随后将所有内容折叠回单个流并在同一个函数中处理它们.我想要做的是以不同的方式处理每个派生流.

我现在正在做的方式是做一堆过滤器.有一个更好的方法吗?

reactive-programming rxjs rx-java

35
推荐指数
2
解决办法
2万
查看次数

RxJava 2.x:我应该使用Flowable还是Single/Completable?

我正在使用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"进行,因为背压管理是因为它是'冷可观察'.在另一方面,我知道请求的结果将是成功的(与响应)或错误,所以我不知道我是否应该使用FlowableSingle甚至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/ ObservablesaveUser方法和Single/ Flowable/ ObservablefindUser方法.

java android reactive-programming rx-java2

35
推荐指数
3
解决办法
1万
查看次数

Scala.React发生了什么?

我读了Odersky撰写的文章"用Scala.React弃用Observer模式"

github看起来被遗弃了:

https://github.com/ingoem/scala-react

此外,最近的Reactive Programming Coursera类使用了JavaRx Observable库(当然还有Scala支持).

这背后有故事吗?我可以假设scala.react只是没有做得很远.基于Observable的JavaRx库是否可取?或者我们可以期待Typesafe中类似或更好的东西吗?

scala reactive-programming observer-pattern

33
推荐指数
2
解决办法
7058
查看次数

在ReactiveCocoa中链接相关信号

在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)

objective-c reactive-programming ios reactive-cocoa

32
推荐指数
1
解决办法
8123
查看次数

不使用Observable.create创建Observable

我在我的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)

android reactive-programming rx-java

32
推荐指数
1
解决办法
6849
查看次数

何时取消订阅订阅

我有一个关于如何取消订阅可观察量的问题.我有两个代码,我不确定哪个更好.

示例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)

android reactive-programming rx-java rx-android

31
推荐指数
3
解决办法
3万
查看次数