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

  1. 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.
  2. 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.
  3. 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).
  4. Chuẩn bị dữ liệu cho Presentation. Sau khi xong use case, có thể trả DTO/View Model để controller render.
  5. 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.

Liên quan