𝗩𝗶ệ𝗰 𝗹𝗮̣𝗽 𝗹𝗮̣𝗶 𝗺𝗮̃ 𝗻𝗴𝘂ồ𝗻 𝗰ò𝗻 𝗿𝗲̉ 𝗵ơ𝗻 𝗹𝗮̀ 𝘁𝗮̣𝗼 𝗿𝗮 𝗻𝗵ữ𝗻𝗴 𝘀ự 𝘁𝗿ừ𝘂 𝘁ượ𝗻𝗴 𝗵ó𝗮 𝘀𝗮𝗶 𝗹ầ𝗺

Các lập trình viên rất ưa chuộng nguyên tắc DRY.

Bạn muốn tránh việc lặp lại chính mình. Bạn muốn có những đoạn mã thanh lịch và có thể tái sử dụng.

Nhưng mục tiêu này thường dẫn đến một cái bẫy: trừu tượng hóa quá sớm (premature abstraction).

Việc lặp lại mã nguồn mang lại cảm giác không đúng. Tuy nhiên, việc trùng lặp thường rẻ hơn là một sự trừu tượng hóa tồi.

Chúng ta cố gắng xây dựng các hệ thống mô-đun hoàn hảo. Chúng ta tìm kiếm các khuôn mẫu (patterns) và trích xuất logic để quản lý sự phức tạp.

Những sự trừu tượng hóa được thiết kế tốt sẽ giúp phần mềm có khả năng mở rộng.

Nhưng nhiều sự trừu tượng hóa được xây dựng quá sớm. Nếu bạn không hiểu rõ vấn đề, sự trừu tượng hóa của bạn sẽ trở thành một gánh nặng.

Một sự trừu tượng hóa sai lầm gây ra nhiều vấn đề:

  • Over-engineering: Bạn xây dựng những giải pháp phức tạp cho những vấn đề đơn giản.
  • Rigidity: Mã nguồn của bạn trở nên khó thay đổi vì nó cố gắng dự đoán một tương lai không bao giờ xảy ra.
  • Obscured Intent: Logic nghiệp vụ bị che lấp dưới các lớp giao diện tổng quát (generic interfaces). Điều này khiến việc gỡ lỗi (debugging) trở nên khó khăn.
  • Tight Coupling: Các phần của hệ thống bị gắn chặt vào chính sự trừu tượng hóa đó.

Cái giá phải trả là rất lớn. Bạn dành thời gian để vật lộn với kiến trúc của chính mình thay vì giải quyết các vấn đề của người dùng. Nó làm chậm tiến độ của nhóm và khiến việc tái cấu trúc (refactoring) trở nên khó khăn.

Tôi không bảo bạn hãy sao chép và dán mọi thứ. Tôi đang đề xuất một cách tiếp cận thực dụng.

Hãy sử dụng việc trùng lặp có kiểm soát như một công cụ. Hãy dùng nó ở những nơi mà yêu cầu thay đổi nhanh chóng hoặc nơi bạn đối mặt với sự không chắc chắn.

Hãy đợi cho đến khi bạn thấy rõ khuôn mẫu (pattern) trước khi xây dựng sự trừu tượng hóa.

Source: https://dev.to/kelvin_kariuki_20f4bec616/developer-take-on-code-duplication-is-far-cheaper-than-the-wrong-abstraction-2cbo