Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement Clean Architecture #1

Open
LamNguyen17 opened this issue Jun 1, 2023 · 4 comments
Open

Implement Clean Architecture #1

LamNguyen17 opened this issue Jun 1, 2023 · 4 comments
Assignees
Labels
enhancement New feature or request

Comments

@LamNguyen17
Copy link

LamNguyen17 commented Jun 1, 2023

Lý do nên áp dụng Clean Architecture:

  1. Chia để trị rất hiệu quả trong ứng dụng lớn: Trong Clean Architecture thì code tầng nào thì ở đúng tầng nấy. Hạn chế được việc "code ở đâu cũng là code, chạy được là được". Nếu làm tốt được các bài toán nhỏ thì không có bài toán lớn nào không giải quyết được.
  2. Rất dễ maintain và mở rộng: Việc tìm kiếm bug và lỗi logic sẽ trở nên dễ dàng và nhanh hơn, file code sẽ không nhiều vì chỉ làm đúng việc của nó. Vì các tầng độc lập với nhau thông qua các Interfaces nên việc mở rộng hoặc thay đổi các tầng sẽ không ảnh hưởng tới nhau. Điều này hạn chế các breaking change cũng như phải viết lại code (refactoring).
  3. Rất dễ làm Unit Test: Các logic business của các tầng trong Clean Architecture chính là các Unit Test cần được kiểm thử rất cẩn thận. Vì sự độc lập thông qua Interfaces nên các mock test rất dễ triển khai. Việc này được thực hiện thông qua implement lại để coverage được tất cả các trường hợp.

Clean Architecture thường sẽ gồm 3 phần chính: Presentation,Domain,Data

  • Presentation module bao gồm các UI và Bloc classes. Nhiệm vụ của module này là tiếp nhận các event từ user và execute các use case tương ứng để trả về các thông tin cần hiển thị lên UI.
  • Domain module bao gồm các Use Case. Nói cách khác, đây là module chứa các business logic của app.
  • Data module bao gồm các Repository với nhiệm vụ nhận data từ các Use Case cũng như cung cấp data cho các Use Case. Data source có thể là từ các server khác nhau thông qua API, local database hoặc Shared Preference,…

Dependency Rule trong Clean Architure:
[https://tech.olx.com/clean-architecture-and-mvvm-on-ios-c9d167d9f5b3](Dependency Rule)

  • Nhờ vào dependency rule mà chúng ta đã tách được sự phụ thuộc lẫn nhau giữa các module. Mỗi khi chúng ta chỉnh sửa UI trong module Presentation, hay khi chúng ta chỉnh sửa Database trong module Data thì đều không ảnh hưởng đến module Domain. Điều này giúp code của chúng ta clean hơn và dễ dàng bảo trì hơn

Dependency Inversion(nguyên lý thứ 5 của SOLID) trong Clean Architure:

  • Các module cấp cao không nên phụ thuộc vào các module cấp thấp. Cả 2 nên phụ thuộc vào abstraction hoặc interface. Interface hay Abstract class còn có một cái hay khác là nó có thể dễ dàng mở rộng bằng cách thêm các abstract function nhưng không cần sửa đổi code. Điều này giúp chúng ta tuân thủ nguyên lý Open/Closed trong SOLID (một module nên được thiết kế sao cho dễ dàng mở rộng nhưng khó sửa đổi) góp phần làm tăng tính stable của Module

Tài liệu tham khảo

@anhtuank7c
Copy link
Owner

@LamNguyen17 Cảm ơn bạn rất nhiều nhé.
Đây sẽ là topic hay để mọi người tìm hiểu và áp dụng.

@anhtuank7c anhtuank7c self-assigned this Jun 2, 2023
@anhtuank7c anhtuank7c added the enhancement New feature or request label Jun 2, 2023
@huy-lv
Copy link

huy-lv commented Jul 3, 2023

@LamNguyen17 bạn có thể share 1 project react native phát triển theo clean architect cho mọn người cùng tham khảo dc ko?

@anhtuank7c
Copy link
Owner

Sorry mình đang bận chạy dự án nên issue này chưa thể update trong thời gian ngắn @huy-lv
Các bạn có thể đọc trước tại link này: https://betterprogramming.pub/clean-architecture-with-react-cc097a08b105

@LamNguyen17
Copy link
Author

LamNguyen17 commented Sep 26, 2023

Đây là source mình tự phát triển về Clean Architecture, bạn tham khảo source này nhé: https://github.com/LamNguyen17/RNArchitecture @huy-lv

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants