Để đi sâu vào Rx, trước tiên chúng ta phải hiểu những khái niệm cơ bản nhất của nó. Sau đây Rx sẽ giải quyết các vấn đề về bất đồng bộ thông qua các khái niệm, thuật ngữ như sau:
Trạng thái (State)
Cụ thể ở đây là trạng thái có thể thay đổi và chia sẻ. Trạng thái khó để mô tả, do vậy chúng ta sẽ hiểu nó thông qua các ví dụ. Khi bạn mở máy tính của mình lên, ban đầu chạy ổn định. Nhưng bạn để chế độ ngủ và tiếp tục mở nó lên, thì sau 1 thời gian nó không còn nhanh nữa, bị crash đột ngột… do trạng thái máy tính đã bị thay đổi. Dữ liệu trong bộ nhớ, tình trạng pin, các thao tác của người dùng vào máy,… là tổng hợp tất cả các trạng thái của máy tính. Quản lý các trạng thái đó, chia sẻ các trạng thái không đồng bộ và xử lý chúng là điều mà các bạn sẽ học ở loạt bài hướng dẫn Rx này.
Lập trình tuần tự
Là mô hình lập trình mà bạn sử dụng mã để thay đổi trạng thái chương trình của mình. Ví dụ bạn đang chơi với 1 con chó, bạn yêu cầu nó nằm, chạy hay sủa.. theo yêu cầu của bạn.
Mã tuần tự là mã mà bạn có thể đơn giản hiểu được, và CPU máy tính cũng làm theo 1 chuỗi tuần tự đơn giản, và vấn đề phức tạp khi làm các ứng dụng không đồng bộ phức tạp sẽ khó xử lý. Cùng xem ví dụ sau:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
setupUI()
connectUIControls()
createDataSource()
listenForChanges()
}
Chúng ta có thể nôm na dịch hiểu đoạn lệnh trên làm những việc sau: tạo giao diện, kết nối các control trên giao diện với controller, tạo data source, và cuối cùng là lắng nghe các sự kiện thay đổi của nó. Chắc chúng ta hằng ngày vẫn làm những việc như này đúng không? Và có thể bạn đã gặp tình huống ai đó thay đổi thứ tự sắp xếp quá trình trên, ví dụ chúng ta lắng nghe sự kiện trước khi kết nối controls, thì crash sẽ xảy ra!
Các trạng thái của ứng dụng – Side effects
Khi người dùng thay đổi các input vào ứng dụng, thì các trạng thái khác nhau của ứng dụng sẽ sinh ra. Và tùy thuộc vào đầu vào mà sẽ sinh những side effects khác nhau. Ví dụ khi login, người dùng bấm sai thì báo alert, khi đăng nhập mà không có mạng, khi nhập thiếu ô,… Rất nhiều các effect khác nhau có thể xảy ra. Rx sẽ giải quyết toàn bộ những side effects đó, thông qua các khái niệm sau.
Declarative code
Trong lập trình tuần tự, bạn thay đổi trạng thái theo ý muốn. Trong lập trình sự kiện, bạn không tạo ra bất cứ side effects nào. Vì bạn đang sống trong 1 thế giới không hoàn hảo, cho nên sẽ có sự giao thoa giữa 2 hướng lập trình trên. RxSwift chính là sự giao thoa đó.
Declarative code – khái niệm cho phép bạn xử lý các side effects của app giống như lập trình tuần tự. Nghĩa là xử lý các sự kiện bất đồng bộ của app như là các sự kiện tuần tự có thể hiểu được.
Reactive systems
Reactive systems – dịch sát nghĩa hơi khó, bạn hiểu nôm na nó là hệ thống phản ứng sự kiện app cũng được! Nó được định nghĩa thông qua các khái niệm trừu tượng sau:
Responsive: luôn luôn cập nhất UI của người dùng, thể hiện trạng thái mới nhất. Nghĩa là trên màn hình của app đang có gì thì nó luôn lấy được trạng thái mới nhất đó.
Resilient: Mỗi hành vi được xác định riêng biệt và linh hoạt, có cơ chế sửa lỗi. Ví dụ hành vi nhập text vào 1 ô được xử lý riêng so với hành vi bấm nút.
Elastic: Mã xử lý các công việc như điền data vào table, thu thập dữ liệu, chia sẻ tài nguyên..
Message driven: Điều hướng sự kiện app nhằm tái sử dụng, tách lớp của các sự kiện trên app.
Bây giờ hẳn đọc đến đây thì bạn vẫn còn mơ hồ lắm chưa hiểu những khái niệm trên là gì. Tuy nhiên đừng hoảng sợ, bạn đầu ai cũng vậy thôi. Thật khó để giải thích nó khi mà không thực hành đúng không nào. Vậy chúng ta hãy đọc tiếp trong bài 4 nhé.
Nguồn: https://topdev.vn/blog/rxswift-3-thuat-ngu-ve-lap-trinh-bat-dong-bo-asynchronous-programming-glossary/