Tầng Domain

Domain Layer là trái tim của ứng dụng - nơi chứa mọi logic nghiệp vụ cốt lõi, mô hình hóa các khái niệm, quy tắc, hành vi của bài toán thực tế. Đây là tầng trong cùng của Layered Architecture - Kiến trúc Phân lớp.

🧩 Thành phần chính

  • Entities & Aggregates: đối tượng có định danh, trạng thái, vòng đời; đảm bảo invariant nghiệp vụ. Xem Domain Entity.
  • Value Objects: đối tượng giá trị bất biến (tiền tệ, phần trăm thuế, địa chỉ). Xem Entity vs Value Object.
  • Domain Services: logic không thuộc riêng entity nào. Xem Domain Service.
  • Domain Events: sự kiện khi trạng thái thay đổi (OrderPlaced). Xem Domain Event.
  • Repository interfaces: định nghĩa các cổng (port) để lưu trữ mỗi Aggregate - chỉ là interface, không chứa logic truy cập DB. Xem Repository Pattern.
  • Factory (tuỳ chọn): tạo các đối tượng phức tạp một cách thống nhất.

⭐ Đặc trưng cốt lõi

  1. Không phụ thuộc framework/hạ tầng. Domain hoàn toàn “thuần” PHP - không import Laravel, không truy vấn DB, không gửi HTTP, không log file. “Sạch” và chỉ chứa logic của nó. Xem Core Code là gì.
  2. Kiểm thử dễ dàng. Không dính bên ngoài → viết unit test chạy toàn bộ domain logic trong memory, nhanh và ổn định (không cần boot Laravel).
  3. Được gọi bởi tầng Application, không tự khởi chạy. Domain như một “lõi” bị động - tuân theo Hollywood Principle: “Don’t call us, we’ll call you” → domain không gọi tầng khác, tầng khác gọi nó.

Liên quan