12/08/2018, 14:48

Giới thiệu về Rocket Data (Phần 1)

Coredata là data framework được cung cấp bởi apple.Là một powerful framework đáp ứng hết tất cả nhu cầu của 1 ứng dụng cần.Hầu hết các ứng dụng cần lưu trữ local, database đều sử dụng Coredata.Tuy nhiên, khi các bạn làm việc với framework này, các bạn sẽ dễ dàng nhận ra coredata có rất nhiều vấn ...

Coredata là data framework được cung cấp bởi apple.Là một powerful framework đáp ứng hết tất cả nhu cầu của 1 ứng dụng cần.Hầu hết các ứng dụng cần lưu trữ local, database đều sử dụng Coredata.Tuy nhiên, khi các bạn làm việc với framework này, các bạn sẽ dễ dàng nhận ra coredata có rất nhiều vấn đề:

  • Coredata thường access lên mainthread, và nó dễ block UI
  • Core Data models không phải là thread-safe (dễ dàng crash ...)
  • Core Data không dễ dàng xử dụng
  • Việc migration trở nên phức tạp
  • High Performance
  • ...

Do đó, cùng với yêu cầu phát triển càng lớn của các ứng dụng, việc sử dụng CoreData đang trở nên không phù hợp và RocketData đang là 1 trong những giải pháp nhằm thay thế.

Rocket Data

Được viết bằng 100% Swift và một hệ thống quản lý immutable model ,non-blocking cùng cùng với lớp persistent đồng bộ .Rocket data có thể sử dụng nhiều cơ chế cache và dễ dàng quản lý với nhưng api đơn giản.

Chúng ta hãy xem ví dụ đơn giản sau đây:

class MyViewController: UIViewController,DataProviderDelegate {
    let dataProvider = DataProvider<PersonModel>()

    func viewDidLoad() {
        super.viewDidLoad()
        dataProvider.fetchDataFromCache(cacheKey: self.id) { (_, _) in
            self.refreshView()
        }
        MyNetworkManager.fetchPerson(id: self.id) { (model, error) in
            if let model = model {
                self.dataProvider.setData(model)
                self.refreshView()
            }
        }
    }
   
    func dataProviderHasUpdatedData<T>(dataProvider: DataProvider<T>, context: Any?) {
        refreshView()
    }
}

1. Flow

Đoạn code được thực hiện như sau: 1 - ViewController lấy dữ liệu từ cache thông qua hàm fetchDataFromCache của DataProvider.Việc lấy dữ liệu từ cache là không động bồ và sẽ không block mainthead.Khi dữ liệu được lấy, thông tin sẽ được hiển thị thông qua hàm refreshView() 2 - Tiếp theo, ViewController lấy thông tin từ server,khi dữ liệu được trả về.Viewcontroller sẽ set data vào dataProvider.DataProvider sẽ handle cơ chế lưu vào cache và Consistency Manager. 3 - Khi có bất kỳ sự thay đổi làm cho PersonModel updated, Consistency Manager sẽ thông báo cho DataProvider model nào đã update và ViewController sẽ update thông tin qua dataProviderHasUpdatedData.

Architecture

Diagram sau thể hiện kiến trúc của RocketData:

  • ViewController : quản lý trực tiếp DataProvider
  • DataProvider<T> : Đối tượng chính mà Viewcontroller tương tác.
  • ConsistencyManager: The consistency engine. https://linkedin.github.io/ConsistencyManager-iOS/.
  • Rocket Data Model Manager: Đây là lớp điều hướng giữa DataProviders và cơ chế cache.
  • Cache: Cơ chế cache mà App chọn (PINCache..)

Setup

Để cài đặt RocketData vào ứng dụng, bạn chỉ cần thực hiện 4 bước cơ bản sau: 1 - Tạo CacheDelegate của app 2 - Tạo DataModelManager. 3 - Tạo class (table) cái sẽ lưu dữ liệu.Những class này phải thỏa mãn Model hoặc SimpleModel protocol 4 - (Optional) Thêm extensions to class

Chỉ cần 4 bước cơ bản trên, bạn có thể sử dụng Rocked Data. Phần sau, mình sẽ hướng dẫn các bạn chi tiết các bước trên.

Tham khảo

https://github.com/linkedin/RocketData

0