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
- Vấn đề khi Core và Infrastructure trộn lẫn - cái giá phải trả nếu không tách
- Lợi ích của việc tách biệt Core và Infrastructure - phần thưởng khi tách đúng
- Giải pháp tổng quan để tách biệt Core và Infrastructure - làm thế nào
- Separation of Concerns - nguyên tắc nền tảng