Helpex - Trao đổi & giúp đỡ Đăng nhập

Mẫu bộ điều hợp trong Swift

Tại Mẫu ứng dụng iOS , chúng tôi đang xây dựng các mẫu di động được mã hóa hoàn toàn được viết bằng Swift để giúp các nhà phát triển và doanh nhân tạo ra các sản phẩm khả thi tối thiểu của họ nhanh hơn. Một phần trong sứ mệnh của chúng tôi là cung cấp mã nguồn được mô-đun hóa cao để các nhà phát triển có thể dễ dàng tùy chỉnh và điều chỉnh mã của chúng tôi để phù hợp với nhu cầu của họ. Trong bài viết này, chúng tôi sẽ nói về mẫu bộ điều hợp, mà chúng tôi sử dụng rộng rãi trong các dự án Xcode của mình.

Mẫu bộ điều hợp trong Swift

Trong kỹ thuật phần mềm, mẫu bộ điều hợp là một mẫu thiết kế phần mềm (còn được gọi là trình bao bọc, một cách đặt tên thay thế được chia sẻ với mẫu trang trí) cho phép giao diện của một lớp hiện có được sử dụng như một giao diện khác. Nó thường được sử dụng để làm cho các lớp hiện có hoạt động với nhau mà không cần sửa đổi mã nguồn của chúng. Xem Wikipedia để biết thêm thông tin về định nghĩa kỹ thuật của mẫu bộ điều hợp.

Mẫu bộ điều hợp trong Swift

Mẫu bộ điều hợp cho phép hai đối tượng hiểu các API của nhau và trao đổi thông điệp giữa chúng. Triển khai giao thức Cocoa DataSource vào ViewController là ví dụ đơn giản nhất về việc sử dụng mẫu bộ điều hợp. Đối tượng chuyên biệt thực hiện giao thức nguồn dữ liệu là một bộ điều hợp cho UITableView / UICollectionView. Tương tự, để triển khai UITableViewDelegate, bộ điều khiển chế độ xem của chúng tôi (trong hầu hết các trường hợp) đang điều chỉnh các phần thông tin về tương tác giữa người dùng và phần giao diện người dùng của chế độ xem bảng.

Trong các dự án Swift của chúng tôi , chúng tôi tạo một bộ điều hợp chuyên biệt cho từng cặp (mô hình, ô). Bằng cách này, chúng tôi có thể tìm nạp bất kỳ mô hình nào từ bất kỳ nguồn dữ liệu nào (đĩa, mạng, dữ liệu giả, v.v.) và chúng tôi có thể hiển thị nó trong bất kỳ ô giao diện người dùng nào. Bằng cách này, chúng tôi chỉ sử dụng MỘT bộ điều khiển chế độ xem chung duy nhất cho TẤT CẢ các màn hình. Tuyệt vời, phải không?

Ví dụ triển khai

Chúng tôi sẽ trình bày một ví dụ ngắn gọn về mẫu bộ điều hợp. Giả sử rằng chúng tôi muốn xây dựng một ứng dụng để quản lý công việc từ công cụ quản lý tác vụ của chúng tôi. Chúng tôi có cấu trúc API trông giống như sau:

struct APITask: Decodable {
    let id: String
    let createdAt: TimeInterval
    let createdBy: String
    let developedBy: String
    let finishedAt: TimeInterval?
}

Trong ứng dụng, chúng tôi không muốn dựa vào các mô hình API, vì vậy chúng tôi cần áp dụng đối tượng này bằng giao thức:

protocol Task {
    var id: String { get }
    var createdAtDate: Date { get }
    var author: String { get }
    var finishedAtDate: Date? { get }
}

Và cuối cùng, nhưng không kém phần quan trọng, chúng ta cần điều chỉnh  APITask để phù hợp với  Task giao thức:

extension APITask: Task {
    var author: String { return createdBy }
    var createdAtDate: Date { return Date(timeIntervalSince1970: createdAt) }
    var finishedAtDate: Date? { return finishedAt.map { Date(timeIntervalSince1970: $0) } }
}

Trong ví dụ này,  APITask tiện ích mở rộng điều chỉnh  APITask đối tượng cụ thể với Task giao thức chung  . Bây giờ, bất kỳ lớp nào giao dịch với một đối tượng chung phù hợp với Task (ví dụ, một khung nhìn), cũng có thể xử lý một  đối tượng  APITask mà thậm chí không nhận ra nó làm như vậy. Lợi ích chính ở đây là chúng ta đã tách hoàn toàn lớp đó (ví dụ như một bộ điều khiển chế độ xem) khỏi lớp mô hình ( APITask).

Mẫu bộ điều hợp có thể được triển khai theo các kiểu khác nhau, vì vậy nó chắc chắn cũng có thể được áp dụng thông qua các đối tượng cụ thể, thay vì giao thức. Chúng tôi sẽ để đó như một bài tập cho người đọc.

Chúng tôi hy vọng bạn thấy mẫu bộ điều hợp trong Swift hữu ích. Apple đang sử dụng nó rộng rãi trong Cocoa và một khi bạn đã quen với nó, nó sẽ giúp bạn có một cách tiếp cận kiến ​​trúc mạnh mẽ hơn trong phát triển ứng dụng iOS. Phần tốt nhất là mẫu bộ điều hợp này có thể được sử dụng trong bất kỳ ngôn ngữ lập trình nào vì nó không dành riêng cho Swift. Có, nó thậm chí còn hoạt động trong các ngôn ngữ hiện đại, chẳng hạn như React Native .

Đừng quên phổ biến thông tin bằng cách chia sẻ hướng dẫn này. Cảm ơn bạn!

Bài viết này ban đầu được xuất bản trong Mẫu ứng dụng iOS .

0 hữu ích 0 bình luận 8.0k xem chia sẻ

Có thể bạn quan tâm

loading