除非您的平台是在JVM框架中构建的,比如Play,Akka actors,或者是Vert.X。您可能一方面在一个堆栈上使用一个servlet容器,另一方面是JDBC或web服务(也即我们的SpringMVC)。在它们之间,有不同数量的层实现业务逻辑,我们不会一次性重构所有的层;让我们从一个简单的例子开始。下面的类表示从数据库抽象出的一个简单的存储库:

class PersonDao {
    List<Person> listPeople() {
        return query("SELECT * FROM PEOPLE");
    }
    private List<Person> query(String sql) {
        //...
    }
}

除了实现细节,这与Rx有什么关系?到目前为止,我们一直在讨论从上游系统推送的异步事件,或者,严谨的说应该是当有人订阅它时。这个平凡的Dao在这里有什么关系? Observable不仅仅是将事件推到下游的管道。您可以将Observable<T>作为一个数据结构,对偶的类比为Iterable<T>。它们都持有类型为T的条条目,但提供了完全不同的接口。所以,你可以简单的相互替换,不要感到惊讶。

Observable<Person> listPeople() {
    final List<Person> people = query("SELECT * FROM PEOPLE");
    return Observable.from(people);
}

译者注:原来的Dao的定义是List<Person>,我们使用对偶的Observable,将其替换为Observable<Person>

在这一点上,我们对现有的API进行了破坏性的更改。这种不兼容性可能是一个主要问题,这取决于你的系统有多大。因此,尽早将RxJava引入您的API是非常重要的。显然,我们正在使用一个现有的应用程序,所以不可能是这样。

results matching ""

    No results matching ""