Phân tích Clean Architecture - Part 1: Domain-Entries-UseCases

1. Phân tích app:

App sẽ bao gồm 1 function duy nhất đó là tạo 1 cái post rồi lưu lại hoặc fetch chúng từ server. 

Các bạn vào đây để get source code về. Bây giờ mình bắt đầu từ trong ra ngoài. Các bạn quan sát mô hình trong các bài trước (ở đây) để tiện theo dõi.

2. Domain:


a. Entries:

Đây sẽ là nơi các bạn định hình các Object của mình. Và folder chứa các Object thì đặt tên là Entries. Lưu ý ở đây chỉ là định nghĩa Object, không conform bất cứ cái gì, việc đó để cho Platform làm. Ví dụ: Ta tạo 1 Entries là Post như sau: 

public struct Post {
    public let body: String
    public let title: String

    public init(body: String,
                title: String) {
        self.body = body
        self.title = title
    }

Có thể extension thêm Equatable nếu muốn. 

extension Post: Equatable {
    public static func == (lhs: Post, rhs: Post) -> Bool {
            return 
                lhs.title == rhs.title && 
                lhs.body == rhs.body &&
    }
}

Tiếp theo là phần quan trọng nhất: 

b. UseCase:

UseCase là nơi định nghĩa các công việc, tính năng mà mình mong muốn. Mỗi entries sẽ có nhiều useCases như là post, delete, save, query v..v. Và thường các việc này sẽ phụ thuộc vào các API được backend đưa cho mình. Đó sẽ là các useCases() cụ thể của một entries. Ngoài ra, ta sẽ có 1 protocol là UseCaseProvider nơi mà mình sẽ quản lý các useCases của từng entries riêng biệt. Ví dụ nha: 

+ Ta có 1 lớp PostUseCase

public protocol PostsUseCase {
    func posts() -> Observable<[Post]>
    func save(post: Post) -> Observable
    func delete(post: Post) -> Observable
}

Ta hoàn toàn có thể tạo Profile Entries rồi tạo ProfileUseCase tương tự như trên. 

+ Và lớp UseCaseProvider như sau: 

public protocol UseCaseProvider {
    func makePostsUseCase() -> PostsUseCase
    // if you have more usecases like profile
    func makeProfileUseCase() -> ProfileUseCase
}

Để cho tiện trong thực tế, ta sẽ có 2, 3 phần khác nhau như Network, Local Database. Khi đó ở phần useCases, mình thấy ta nên chia ra thành các folder rõ ràng như NetworkUseCases, LocalDatabaseUseCases, OthersUseCases, v..v để tránh bị rối. Qua đó cũng tô lên cái hay của Clean Architecture khi mà các phần được phân chia rạch ròi, chẳng ai đụng ai.

Như vậy, cơ bản mình đã xong phần 1: Domain-Entries-UseCases. Tiếp theo sẽ là phần hay và khó nhất ở CA: Platform.

Bình luận
* Các email sẽ không được công bố trên trang web.
I BUILT MY SITE FOR FREE USING