Tầng Infrastructure

Infrastructure Layer chứa tất cả thành phần kết nối ứng dụng với thế giới bên ngoài, cung cấp kỹ thuật triển khai cụ thể cho các interface trừu tượng ở tầng trong. Đây là lớp ngoài cùng và thường là phần code đồ sộ nhất (framework, DB, tích hợp hệ thống khác). Nó hiện thực hóa Infrastructure Code là gì.

🧩 Thành phần chính

  • Framework & Drivers: Controller, Form Request, Routes, Console Command, Jobs queue - nhận input từ HTTP/CLI rồi chuyển vào application layer.
  • ORM & Database: triển khai repository bằng công nghệ cụ thể (EloquentOrderRepository), Migration, seeder.
  • External Service Adapters: gọi dịch vụ ngoài qua API, message broker, gửi email (MailService), gọi API thanh toán (StripePaymentGateway).
  • Infrastructure Services: logging, authentication, caching.
  • Implementations của Interfaces: mọi interface ở domain/application được cài đặt ở đây (OrderRepositoryEloquentOrderRepository, NotificationServiceMailNotificationService).

📌 Đặc điểm

  1. Phụ thuộc vào application/domain. Hạ tầng triển khai các interface do tầng trong định nghĩa → phụ thuộc ngược vào các định nghĩa đó. Theo Dependency Inversion Principle, điều này hoàn toàn chấp nhận được (domain chỉ là interface, không kéo phụ thuộc cụ thể nào). Xem Dependency Rule - Quy tắc phụ thuộc một chiều.
  2. Chứa logic kỹ thuật, không chứa logic nghiệp vụ. Có if/else thì cũng là kỹ thuật (retry kết nối, format lại dữ liệu ngoài), không phải rule nghiệp vụ.
  3. Kiểm thử dạng integration. Vì đòi hỏi môi trường ngoài (DB, service), unit test thuần ít ý nghĩa → viết integration test (vd test EloquentOrderRepository với DB thật). Chạy chậm hơn nhưng cần thiết.

Infrastructure là nơi “ít sạch nhất” với các chi tiết nền tảng, nhưng nhờ tách riêng, hai tầng bên trong (Domain, Application) mới có thể “sạch sẽ” tập trung vào nghiệp vụ.

Liên quan