Tầng Application
Application Layer nằm ngay bên ngoài Tầng Domain. Tầng này điều phối các hoạt động nghiệp vụ để thực hiện yêu cầu người dùng - nó sử dụng năng lực của domain để hoàn thành một use case cụ thể. Ví như “lớp keo” nối nhu cầu bên ngoài với năng lực bên trong.
🧩 Thành phần chính
- Application Services / Use Case Handlers: mỗi use case thành một dịch vụ (
PlaceOrderHandler,OrderService::placeOrder). Xem Application Service. - Command/Query Objects: Command Object và DTO chứa dữ liệu để thực hiện hành động; tương ứng có Command Handler. Liên hệ CQRS - Command Query Responsibility Segregation.
- Facade/Orchestrator: application service điều phối nhiều bước / gọi nhiều service con theo đúng thứ tự.
📌 Đặc điểm
- Phụ thuộc domain, không ngược lại. Application biết về domain (gọi interface repository, entity, domain service) nhưng domain hoàn toàn không biết về application → tuân Dependency Rule - Quy tắc phụ thuộc một chiều.
- Không chứa logic nghiệp vụ chi tiết. Có thể có chút logic điều kiện, nhưng phần lớn quy tắc đã ở domain. Nếu service bắt đầu nhiều tính toán → đẩy xuống domain.
- Xử lý transaction & tích hợp. Thường mở/commit transaction; là nơi gọi các dịch vụ hạ tầng (qua interface).
- Chuẩn bị dữ liệu cho Presentation. Sau khi xong use case, có thể trả DTO/View Model để controller render.
- Phân chia module theo use case. Application layer như tập hợp nhiều “bộ xử lý use case”, nhóm theo Bounded Context. Xem Bounded Context.
Tóm lại: application layer không làm thay domain, mà gọi domain để làm việc.