- Published on
Clean Architecture trên SwiftUI(iOS)
- Authors
- Name
- Nguyen Hong Son(SAM)
- @samhon1459
Link Qiita
日本版::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.
- 日本版::Link Qiita
- SwiftUI là gì và tại sao nên sử dụng nó?
- Tại sao nên sử dụng Clean Architecture?
- Cấu trúc chính của Clean Architecture
- Tổng quan về mã nguồn
- Sơ đồ luồng các màn hình
- Ảnh chụp màn hình
- Cấu trúc ứng dụng
- Kết luận
- Dự án đầy đủ
- Tham khảo
- Giấy phép
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
- 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.
- 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.
- 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ã.
- 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.
- 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:
- Tăng Tính Bảo Trì: Dễ dàng bảo trì và cập nhật.
- 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.
- 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ử.
- 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ý.
- 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
- Entities: Định nghĩa các đối tượng nghiệp vụ và quy tắc của ứng dụng.
- Use Cases: Chứa logic nghiệp vụ, quyết định cách dữ liệu được xử lý và lưu trữ.
- Interface Adapters: Chuyển đổi dữ liệu giữa các lớp nghiệp vụ và lớp framework.
- 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 Login | ![]() Màn Hình Register |
![]() Màn Hình Course | ![]() 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.