Micro service thiết kế Clean Architecture với MediatR và RabbitMQ

Clean Architecture là một kiến trúc ứng dụng rất nổi tiếng dựa trên nguyên lý loại bỏ sự lệ thuộc giữa các layer trong ứng dụng. Nguyên lý này kế thừa và phát triển dựa trên Dependency Inversion (một nguyên lý trong SOLID).

Trong kiến trúc Clean Architecture bao gồm 4+ layer được biểu thị bởi các đường tròn đồng tâm. Các layer bên trong sẽ không hề biết gì về các layer bên ngoài.





Domain:

Đây là layer trung tâm của hệ thống. Domain bao gồm các Entiy chính là các thực thể hoặc đối tượng của hệ thống. Trong OOP thì đây chính là Object bao gồm các menthod và properties tuân thủ theo nguyên tắc Encapsulation mà chỉ bên trong của Object mới có thể thay đổi trạng thái của chính nó.

Application:


Đây là layer chứa các business logic ở cấp độ cụ thể từng Use Case.

Các Use case này cũng sẽ không quan tâm và lệ thuộc vào việc data đến từ đâu. Dữ liệu đến từ nguồn nào và thể hiện ra sao là nhiệm vụ của layer Infrastructure hoặc còn gọi là Interface Adapters.

Infrastructure:



Đây là layer cơ sở hạ tầng là nơi các hệ thống bên ngoài được tương tác. Lớp này xác định việc triển khai các phần trừu tượng được xác định trong layer Application.

Lớp này rất quan trọng để giữ cho ứng dụng của chúng tôi luôn sạch sẽ và tường minh. Đối với thử nghiệm đơn vị chung, lớp này là lớp được mô phỏng nhiều nhất.

Persentations:


Đây có thể coi là lớp trình bày của hệ thống, Nó là nơi hệ thống được nhận các tương tác. Có thể thông qua các API, Web UI hoặc command CLI.

Nguyên tắc chung:


Để đạt được sự phân tầng và phân tách các mối quan hệ của kiến trúc này, chúng ta cần tuân theo một số các nguyên tắc.

Để cho phép tách biệt các mối quan tâm chung ta cần tuân theo nguyên tắc đảo ngược sự phụ thuộc (DIP). Nguyên tắc này nêu rõ các mô đun cấp cao không nên phụ thuộc vào các mô đun cấp thấp. Cả hai nên phụ thuộc vào sự trừu tượng. Sự trừu tượng không nên phụ thuộc vào chi tiết. Chi tiết nên phụ thuộc vào sự trừu tượng.

Điều này cũng có nghĩa là lõi ứng dụng không nên phụ thuộc vào bất kỳ thứ gì bên ngoài chính nó.

Kiến trúc sạch trong một ứng dụng .Net core:


Nếu bắt đầu xây dựng một kiến trúc sạch cho hệ thống của bạn dựa trên nền tảng .Net 6 thì đây là một hình mẫu bạn nên quan tâm SC.Microservice.Template.

1. Install .Net SDK 6
2. Install RabbitMQ
3. Run command for install this template:

dotnet new install SC.Microservice.Template::1.2.0
4. Run command for install new project:

dotnet new sc-micro-sln -n MyProjectName
Trong khuôn khổ của template này sử dụng RabbitMQ để gửi thông điệp từ nhà cung cấp sang người sử dụng.


Nhận xét