+1

Giới thiệu về Gloss framework

Mở đầu

Hầu hết chúng ta đều biết, đa số các ứng dụng phát triển trên nền mobile thì đều có việc liên kết dữ liệu giữa client và server. Các gói dữ liệu này phổ biến ở dạng các đối tượng JSON, Javascript Object Notation. Trong phạm vi bài viết, ta sẽ nói về nền tảng iOS, với 2 ngôn ngữ phát triển là Objective - C và Swift. Ngoài các thư viện chuẩn của Apple, thì ở mỗi ngôn ngữ này lại có các thư viện giúp chúng ta thao tác với dữ liệu JSON một cách nhanh chóng, dễ hiểu, và đặc biệt là hạn chế các rủi ro trong quá trình xử lý dữ liệu từ server so với cách làm thủ công. Trong bài viết này, chúng ta sẽ tìm hiểu về một framework của ngôn ngữ Swift, đó là Gloss framework.

1. Cài đặt Gloss

Có nhiều cách để implement Gloss vào trong project Cách 1: Download trực tiếp:

https://github.com/hkellaway/Gloss/archive/master.zip

Cách 2: Dùng CocoaPods:

pod 'Gloss'

Cách 3: Dùng Carthage:

github "hkellaway/Gloss"

Cách 4: Dùng Swift Package Manager:

import PackageDescription

let package = Package(
    name: "HelloWorld",
    dependencies: [
        .Package(url: "https://github.com/hkellaway/Gloss.git", majorVersion: 1, minor: 2)
    ]
)

2. Sử dụng

Mục đích cuối cùng của các thư viện này tồn tại trong project đó là: Chúng ta tạo ra các đối tượng gọi là Model, đó là những đối tượng mà có các trường dữ liệu tương ứng với các trường dữ liệu của đối tượng JSON, dùng thư viện này để map dữ liệu từ JSON và lưu vào Model. Có thể nói Model là một dạng thể hiện cấu trúc dữ liệu của JSON. Vì thế, Model đại diện cho JSON về mặt cấu trúc, sơ đồ, mô hình dữ liệu,... JSON như thế nào thì Model tương ứng nó như thế sẽ như thế, đó là tiêu chuẩn của việc thành lập Model. 1. Tạo một Model đơn giản Ta có một Person JSON:

{
    "id" : 1,
    "name" : "Leo",
    "age" : 25
}

thì ta sẽ tạo một PersonModel như thế này:

import Gloss

class PersonModel: Decodable {
    var personId = 0
    var name: String = ""
    var age: Int = 0
    
    init?(json: JSON) {
        self.personId = "id" <~~ json
        self.name = "name" <~~ json
        self.age = "age" <~~ json
    }
}

2. Một Model phức tạp hơn (model chứa model khác): JSON:

{
    "id" : 1,
    "name" : "Leo",
    "age" : 25,
    "address" : "Da Nang",
    "company" : {
        "id" : 1,
        "name" : "Framgia"
    }
}

Model tương ứngứng

import Gloss

class Person: Decodable {
    var personId: Int = 0
    var name: String?
    var address: String?
    var company: Company?
    
    init?(json: JSON) {
        self.personId = "id" <~~ json
        self.name = "name" <~~ json
        self.address = "address" <~~ json
        self.company =  "company" <~~ json
    }
}

class Company: Glossy {
    var companyId: Int = 0
    var name: String?
    
    func toJSON() -> JSON? {
        return jsonify([
            "id" ~~> self.companyId,
            "login" ~~> self.name
        ])
    }
}

Đó là ứng dụng của Gloss về việc parse JSON Chúng ta để ý ở Company class có thêm một method là toJSON() và trả về một đối tượng JSON. Nghĩa là ngoài việc chuyển dữ liệu từ JSON vào Model thì nó cũng có thể làm điều ngược lại là chuyển một Model thì một JSON

Ngoài ra thì còn có nhiều cách làm việc với Gloss về việc chuyển đổi dữ liệu Date Transformations, Custom Transformations (From/To JSON), Gloss Operators,... Tất cả đều có hướng dẫn cụ thể cách implement, và quan trọng là nó không khó, không quá phức tạp đối với những Developer đã từng làm việc với JSON. Nên không nhất thiết phải trình bày hết trong bài post này. Nếu bạn quan tâm thì nên lấy source code mẫu trên github ở đầu bài viết về để đọc kỹ hơn.

Lời kết

Cuối cùng, mục đích của bài post này chỉ là giới thiệu đến mọi người và đặc biệt là các iOS Developer một framework khác cho việc xử lý dữ liệu JSON. Tất nhiên không thể đánh giá được thư viện nào tốt hơn thư viện nào, chỉ là ta thấy hợp lý, dễ hiểu, dễ bảo trì và quan trọng là ta thấy thích là ta dùng thôi. Bởi vì một thư viện sử dụng nhanh gọn đơn giản chưa chắc đã ngon, một thư viện phức tạp, dài dòng cũng chưa chắc là dỡ, cái chính là mục đích, phạm vi của từng dự án thì dùng các loại thư viện tương ứng phù hợp là được.

Xin cảm ơn mọi người đã bỏ thời gian quý báu của mình để đọc bài viết này.

Rất trân trọng.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.