ReactiveX là gì

ReactiveX là gì? Nó không phải là 1 api mà nó còn là một ý tưởng mới, một bước đột phá trong lập trình. Nó đã truyền cảm hứng cho rất nhiều các framework khác, các API khác và thậm trí nó đã ảnh hưởng tới sự thay đổi của các ngôn ngữ lập trình. Vậy thì trong bài viết này chúng ta sẽ cùng nhau tìm hiểu về ReactiveX. 

Như tiêu đề có nhắc tới ReactiveX đã ảnh hưởng tới sự thay đổi của các ngôn ngữ lập trình. Vậy cụ thể là ReactiveX đã có mặt trên rất nhiều ngôn ngữ lập trình: Java, JS, .Net, Scala, Swift, etc. Các biến thể đi theo các ngôn ngữ là: RxJava, RxJS, Rx.Net, RxScala, RxSwift.

ReactiveX có mặt ở khắp mọi nơi.

– Font-end: Control các event ở UI, threading, control các API trả về. Trên web thì ta sẽ có RxJS, trên mobile thì có RxJava, Rx.Net.

– Cross-platform: có mặt với các ngôn ngữ: Java, Scala, C#, C++, Clojure, JavaScript, Python, Groovy, JRuby, và nhiều ngôn ngữ khác.

– Back-end: Sử dụng tính bất đồng bộ trong ReactiveX để xử lý các tiến trình bất đồng bộ và độc lập.

1. ReactiveX là gì?

ReactiveX là sự kết hợp tuyệt vời giữa mô hình observable, interator và functional programing. ReactiveX là một thư viện hỗ trợ xử lý các tiến trình bất đồng bộ và xử lý các luồng sự kiện bằng cách sử dụng tuần tự các observable.

2. Một số đặc điểm nổi bật ReactiveX

– Create: Với ReactiveX ta có thể dễ dàng khởi tạo các luồng sự kiện hoặc luồng dữ liệu.

– Combine: Dễ dàng điều chỉnh và truyển đổi luồng dữ liệu hoặc luồng sự kiện với các hàm tương tự nhau.

– Listen: Subscribe bất cứ luồng Observable nào để thực hiện các truy vấn mong muốn.

– Functional: đơn giản hóa code, sử dụng các function input và output rõ ràng qua các luồng có thể quan sát được.

– Async error handling: try/catch truyền thống luôn bất lực với việc xử lý bất đồng bộ. Nhưng với ReactiveX được trang bị bộ tích hợp để xử lý lỗi.

– Concurrency made easy: Observable và Schedulers trong ReactiveX cho phép trừu tượng thread, synchronization.

3. Observer là gì? 

ReactiveX được kế thừa mô hình observer để hỗ trợ xử lý tuần tự data và các luồng sự kiện. Và nó trừu tượng hóa các thread để ta có thể thấy được các luồng xử lý dữ liệu hoặc các luồng sự kiện 1 cách rõ ràng hơn.

Observer parttern là một software design parttern mà trong đó mỗi object được gọi là 1 subject, cung cấp một danh sách các object phụ thuộc gọi nó là Observer. Và nó sẽ tự thông báo khi có bất cứ thay đổi nào tron trạng thái của object.

VD: Anh A là giám đốc công ty X và dưới anh A có 1 người trưởng phòng (observer) và dưới anh trưởng phòng này có 30 nhân viên. Khi anh A nói với trưởng phòng là hãy thông báo cho tất cả nhân viên được nghỉ ngày hôm nay. Thì anh trưởng phòng sẽ báo cho tất cả 30 nhân viên còn lại thông báo từ anh A.

Trong vd trên anh trưởng phòng giống như 1 Observer cho đối tượng A (anh giám đốc). Và 30 nhân viên kia là các Object khác phụ thuộc vào anh A. Khi anh A có 1 thuộc tính thay đổi thì Observer sẽ tự động thông báo cho 30 nhân viên còn lại.

4. Tại sao ReactiveX sử dụng Observer parttern?

Observer có thể điều chỉnh được: Vậy tại sao không phải Futures trong java? Về mặt kỹ thuật Observer parttern khá giống với future trong java. Nhưng với Futures mọi thứ trở lên phức tạp khi các xử lý bất đồng bộ và lồng vào nhau. Observer tạo ra các luồng xử lý đồng thời và bất đồng bộ nhưng vẫn tuần tự với nhau.

Observer rất linh hoạt: Observer không chỉ có thể emit một giá trị mà nó còn có thể emit một hoặc nhiều các event vô hạn. Observer là một object trừu tượng nên nó có thể được sử dụng cho bất kỳ trường hợp nào.

Dễ dàng get data sau khi thread xử lý thành công.

Dễ dàng xử lý data ngoài lề của thread mà không ảnh hưởng đến kết quả khi subscriber.

5. Reactive Programming.

Reactive programming là lập trình với luồng dữ liệu bất đồng bộ.

VD: thông thường chúng ta nhập 1 ký tự hoặc nhấn vào 1 button trên một activity thì đó gọi là một sự kiện bất đồn bộ (asynchronous event), Nhưng khi ta gõ liên tục hoặc nhấn liên tục vào các button trên màn hình thì đó được gọi là luồng sự kiện bất đồng bộ (asynchronous event streams). Vậy thì làm sao chúng ta có thể controll được các luồng sự kiện bất đồng bộ như : fillter, gộp nhiều luồng lại với nhau,v.v.v. Giải pháp là sử dụng Reactive Programming.

ReactiveX cung cấp một tập các toán tử(function) mà ta có thể fillter, select, transform, combine, và compose Observables. Nó cho phép ta thực hiện1 cách hiệu quả và dễ dàng.

Kết Thúc: 

Qua bài viết chúng ta có một cái nhìn khái quát về ReactiveX. Để tìm hiểu sâu hơn thì chúng ta cần phải đi vào áp dụng nó trong ngôn ngữ chúng ta đang xây dựng. Cụ thể trong bài viết sau chúng ta sẽ cùng nhau tìm hiểu về ReactiveX trong java là RxJava.

Với kiến thức còn hạn chế, và một phần vì document của reactivex khá chuối nên có rất nhiều khó khăn khi ta tìm hiểu đến ReactiveX nhưng nó là một thứ vô cùng hấp dẫn khiến ta không thể bỏ cuộc.

ReactiveX là một tập hợp các dự án nguồn mở và liên tục phát triển.

(Tác giả: Ninh Luyến)

Bình luận

Loading...