Vì sao phải tách biệt Core và Infrastructure

Đây là tư tưởng xuyên suốt cả cuốn sách. Core Code là gì (logic nghiệp vụ) và Infrastructure Code là gì (kết nối bên ngoài) đều quan trọng như nhau, nhưng nếu trộn chung trong một layer/module thì sẽ phát sinh nhiều vấn đề về bảo trì và phát triển.

🎯 Mục tiêu của việc tách biệt

Tạo ra một ranh giới rõ ràng (boundary) giữa logic nghiệp vụ cốt lõi và phần triển khai kỹ thuật bên ngoài. Khi đạt được điều này:

  • Phần domain (nghiệp vụ) phát triển độc lập, tập trung, không bị ảnh hưởng bởi chi tiết DB, framework hay dịch vụ ngoài.
  • Xây được nền tảng vững cho phát triển hướng nghiệp vụ (domain-driven) và các thực hành như test-first / TDD.

💬 Ý tưởng cốt lõi qua một câu

Khi đọc phần core code, developer phải thấy được câu chuyện nghiệp vụ đang diễn ra, thay vì bị che giấu trong các đoạn code nặng tính mô tả kỹ thuật.

Ví dụ: thay vì trong hàm xử lý đơn hàng có một mớ câu lệnh SQL insert, ta muốn hàm đó chỉ gọi một phương thức “lưu đơn hàng” ở mức tổng quát (orderRepository->save($order)). Chi tiết “lưu bằng SQL hay API” do lớp hạ tầng đảm nhận.

Tóm lại: mỗi phần code có một trách nhiệm rõ ràng - core lo nghiệp vụ, infra lo tương tác môi trường ngoài. Đây chính là Separation of Concerns áp dụng ở cấp kiến trúc.

Liên quan