Tổng quan
Luật trừu tượng rò rỉ nói rằng mọi abstraction không tầm thường đều có lúc để lộ chi tiết bên dưới. Framework, ORM, network stack hay runtime có thể che bớt phức tạp, nhưng không xóa phức tạp khỏi hệ thống.
Ý chính
- Abstraction tốt vẫn có edge case buộc bạn hiểu tầng thấp hơn.
- Hiệu năng, lỗi mạng, memory leak hoặc transaction boundary thường là nơi abstraction bắt đầu rò rỉ.
- Dùng tool cấp cao không thay thế nhu cầu hiểu mô hình vận hành cơ bản bên dưới.
Ví dụ từ nguồn
ORM giúp thao tác database như object, nhưng khi gặp N+1 query, lock hoặc transaction sai, bạn vẫn phải hiểu SQL và database engine.
Garbage collection che đi cấp phát bộ nhớ thủ công, nhưng ứng dụng vẫn có thể leak vì giữ reference quá lâu hoặc bị pause ảnh hưởng latency.
Nguồn gốc
Joel Spolsky giới thiệu luật này trong một bài blog năm 2002, với ví dụ như TCP che độ tin cậy trên IP nhưng vẫn rò rỉ khi mạng xấu gây timeout.
Lưu ý khi áp dụng
Chọn abstraction vì nó giảm phần lớn chi phí hằng ngày, nhưng luôn giữ lối thoát để debug tầng thấp khi production buộc phải nhìn xuống.