Minh họa cho Định luật Trừu tượng rò rỉ
Law #8 Kiến trúc

Định luật Trừu tượng rò rỉ

The Law of Leaky Abstractions

Mọi abstraction đủ phức tạp đều sẽ để lộ chi tiết bên dưới vào lúc bạn ít mong muốn nhất.

Nguồn tham khảo: Laws of Software Engineering

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.

← Quay lại danh sách 56 luật