Logo
Published on

Clean Architecture trên SwiftUI(iOS)

Authors

Giới thiệu

Xin chào các bạn, trong bài viết này tôi muốn chia sẻ với mọi người bộ mã nguồn mà tôi đã xây dựng để phát triển ứng dụng Android theo Clean Architecture.

Tôi đang đăng tải bộ mã nguồn này trên GitHub cá nhân tại GitHub.

Mặc dù đã từng sử dụng các mô hình như MVVM, MVC, MVP, TCA trong việc phát triển ứng dụng di động cho khách hàng, tôi cảm thấy MVVM vẫn có tính ứng dụng cao nhất trong việc kiểm thử và dễ dàng duy trì. Điều quan trọng nhất là nó có khái niệm use case, cho phép bóc tách chúng từ các user story để thiết kế tài liệu cơ bản.

SwiftUI là gì và tại sao nên sử dụng nó?

SwiftUI là một framework do Apple phát triển để xây dựng giao diện người dùng (UI) cho các ứng dụng iOS, macOS, watchOS và tvOS. Được giới thiệu lần đầu tiên tại WWDC 2019, SwiftUI cung cấp một cách tiếp cận hiện đại và khai báo để phát triển UI, cho phép lập trình viên tạo ra các giao diện người dùng dễ dàng hơn và trực quan hơn.

Lợi ích của việc sử dụng SwiftUI

  1. Cú pháp khai báo dễ đọc (Declarative Syntax):
  • Tạo UI bằng cách định nghĩa trạng thái mong muốn, giúp mã ngắn gọn và dễ hiểu.
  1. Phát triển và bảo trì nhanh chóng (Fast Development and Maintenance):
  • Thấy ngay thay đổi trong UI qua SwiftUI Preview, tăng tốc phát triển và gỡ lỗi.
  1. Khả năng tái sử dụng và nhất quán (Reusability and Consistency):
  • Tạo và tái sử dụng các thành phần UI một cách dễ dàng, giảm thiểu lặp lại mã.
  1. Hỗ trợ đa nền tảng (Cross-Platform Support):
  • Sử dụng cùng một mã cho iOS, macOS, watchOS, và tvOS, tiết kiệm thời gian và công sức.
  1. Tích hợp tốt với công nghệ Apple khác (Integration with Apple Technologies):
  • Hoạt động tốt với Combine và Core Data, giúp xây dựng ứng dụng mạnh mẽ hơn.

Tại sao nên sử dụng Clean Architecture?

Clean Architecture mang lại nhiều lợi ích, tôi xin tóm tắt ngắn gọn như sau:

  1. Tăng Tính Bảo Trì: Dễ dàng bảo trì và cập nhật.
  2. Dễ Dàng Mở Rộng: Dễ dàng thêm mới tính năng mà không làm ảnh hưởng đến phần còn lại của hệ thống.
  3. Tăng Khả Năng Kiểm Thử: Các thành phần được tách riêng, dễ dàng kiểm thử.
  4. Giảm Phụ Thuộc: Các lớp phụ thuộc vào nhau ít hơn, giúp dễ dàng quản lý.
  5. Tập Trung Vào Nghiệp Vụ Cốt Lõi: Tách biệt rõ ràng giữa logic nghiệp vụ và các thành phần UI.

Cấu trúc chính của Clean Architecture

  1. Entities: Định nghĩa các đối tượng nghiệp vụ và quy tắc của ứng dụng.
  2. Use Cases: Chứa logic nghiệp vụ, quyết định cách dữ liệu được xử lý và lưu trữ.
  3. Interface Adapters: Chuyển đổi dữ liệu giữa các lớp nghiệp vụ và lớp framework.
  4. Frameworks: Chứa các thành phần cụ thể của framework như UI, cơ sở dữ liệu, và các dịch vụ bên ngoài.

Clean Architecture giúp tạo ra một ứng dụng linh hoạt, dễ bảo trì và dễ kiểm thử, đồng thời hỗ trợ thay đổi và phát triển lâu dài mà không làm gián đoạn hoạt động hiện tại của hệ thống.


Tổng quan về mã nguồn

Tôi đã tạo ra một ứng dụng MVP với các tính năng tối giản nhất. Sự tối giản này không làm cho nền tảng của ứng dụng trở nên sơ sài mà ngược lại, giúp người mới tiếp cận dễ dàng hơn. Trong mã nguồn lần này, tôi đã áp dụng tất cả các công nghệ mới nhất hiện có như Swift-Data, R.swift, Resolver và sử dụng các quy tắc code clean được đề xuất cho SwiftUI.

Sơ đồ luồng các màn hình

+-----------+        +-----------+        +------------+
|           |        |           |        |            |
|  Splash   | ------>|   Login   | ------>|    Main    |
|  Screen   |        |   Flow    |        |    Flow    |
|           |        |           |        |            |
+-----------+        +-----------+        +------------+

Ảnh chụp màn hình

Dưới đây là các ảnh chụp màn hình của ứng dụng iOS trong các chế độ khác nhau.

Màn Hình Splash

Màn Hình Splash

Màn Hình Login

Màn Hình Login

Màn Hình Login

Màn Hình Register

Màn Hình Course

Màn Hình Course

Màn Hình Student

Màn Hình Student

iOS

Cấu trúc ứng dụng

Cấu trúc của ứng dụng bao gồm 5 phần chính:

  • App: Quản lý điều hướng, ứng dụng và các phụ thuộc của app.
  • Core: Chứa tất cả các xử lý chung của app như xử lý user defaults, các view chung, lưu cache, và xử lý mạng.
  • Presentation: Chứa các màn hình giao diện.
  • Resource: Chứa các tài nguyên của app như string, animation.
  • Data: Quản lý dữ liệu cho toàn ứng dụng, bao gồm repository, quản lý API, cơ sở dữ liệu và các usecase.

Kết luận

Hy vọng bạn sẽ thích mã nguồn này. Nếu có bất kỳ phản hồi hoặc đề xuất nào, vui lòng mở một vấn đề trên GitHub hoặc liên hệ với tôi trên LinkedIn.

Dự án đầy đủ

Bạn có thể truy cập mã nguồn của dự án từ liên kết dưới đây: GitHub.

Tham khảo

Giấy phép

MIT © Yoneyama SAM