Giới thiệu Clean Architecture kết hợp MVVM

Tram Ho

Giới thiệu về Clean Architecture

Đây là mồ hình giúp cấu trúc gíup phân tách các chức năng qua các lớp. Thông qua mô hình này, sẽ hỗ trợ rất nhiều thông qua việc suy nghĩ logic cẩn thận và hiệu quả, nhận ra sự không phù hợp giữa Use Cases và Entities, đặt ra hướng đi trong hệ thống. Nó cũng hướng tới sự độc lập tối đa của bất kì thư viện hay tool nào, để phù hợp cho việc kiểm tra và thay thế chúng.

Áp dụng cùng MVVM

  • Domain Layer: Entites + Use Cases + Gatway Protocols
  • Data Layer: Gateway Implementations + API(Network) + Database
  • Presentation Layer: ViewModels + Views+ Navigator + Scene Use Cases

Hướng xử lý

Đi vào chi tiết

Lớp Domain

Entities

Chứa các Business logic. Là lớp quan trọng nhất, nơi bạn thực hiện giải quyết các vấn đề – mục đích khi xây dựng app. 1 entity có thể là 1 object với các phương thức, hoặc nó là 1 tập hợp của struct và hàm. Điều đó không quan trọng, entities có thể sử dụng bởi nhiều cách khác nhau trong cùng 1 ứng dụng.
Entites có thể đơn giản là dữ liệu structures:

Use Cases

Chưa các rule về apploaction-specific. Nó đóng gói và triển khai tất cả các ca sử dụng trong hệ thống. Các ca sử dụng cấu trúc các luồng dữ liệu tới và đi từ entites, và hướng các entities đó tới các Critical Business Rules -> mục đích của các ca sử dụng.
UseCases là những protocol, để làm những việc cụ thể như:

Gateway Protocols

Về cơ bản, gateway chỉ là 1 phần trừu tượng mà sẽ hiển những công việc được triển khai phía dưới. Nó có thể là 1 Data Store (pattern Repository), 1 API gateway, v…v. Chẳng hạn với Database gateway sẽ có những phương thức để thực hiện yêu cầu của ứng dụng. Tuy nhiên, đừng cố gắng ẩn hết các quy tắc rule quan trọng qua gateway. Tất cả truy vấn tới database phải tương đối đơn giản như phương pháp CRUD , và tất nhiên 1 số bộ lọc cũng được chấp nhận.

Lớp Data

Lớp Data chứa các triển khai Gateway và 1 hoặc nhiều Data Stores. Gateway là phản hồi cho dữ liệu điều phối từ những Data Store. Data Store có thể online hoặc offline (ví dụ presistent database). Lớp Data chỉ phụ thuộc vào lớp Domain.

Gateway Implementations

UserDefaults

APIs

Map JSON Data tới Domain Entities sử dụng ObjectMapper:

CoreData Repositories

Map CoreData Entities tới Domain Entitites và ngược lại:

Vậy là chúng ta đã kết thúc phần 1, về kết hợp mô hình MVVM và cấu trúc Clean Architectures. Hẹn gặp lại vào phần 2.
Nguồn bài gốc anh Tuấn

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo