DRY không hiệu quả, hãy dùng WET

Công Nghệ
DRY không hiệu quả, hãy dùng WET
Bài viết được sự cho phép của tác giả Lưu Bình An Khi bạn học lập trình bạn sẽ được nghe tới khái niệm DRY (Don’t Repeat Yourself), bạn rất có thể đã vận dụng sai ý nghĩa của nó. "Code dễ đọc" là như thế nào? "Mẹo bỏ túi"...

Bài viết được sự cho phép của tác giả Lưu Bình An

Khi bạn học lập trình bạn sẽ được nghe tới khái niệm DRY (Don’t Repeat Yourself), bạn rất có thể đã vận dụng sai ý nghĩa của nó.

Trên wiki: DRY là nguyên tắc bạn đừng viết lặp lại một đoạn code

Bạn: Ok, những phần code bị trùng mình sẽ chuyển thành abstraction

Giải pháp trông có vẻ hiển nhiên đúng, nhưng không, abstraction của bạn thường là sai.

Đây là lý do tại sao:

  1. Bạn thì code bị duplicate
  2. Bạn đưa đoạn duplicate ra thành một abstract (method, class)
  3. Bạn thay thể toàn bộ phần duplicate bằng abstraction mới
  4. Bạn nghĩ code đã hoàn hảo
  5. Thời gian trôi đi
  6. PM đưa thêm các yêu cầu mới.
  7. Bạn bắt đầu hiện thực các yêu cầu mới
  8. Với yêu cầu mới này, bạn phải chỉnh sửa vài đoạn trong abstraction, if...else các kiểu, đổi parameter, abstraction của chúng ta có thể đưa ra những action khác nhau theo những điều kiện khác nhau
  9. Giờ abstraction của trọng sẽ cho ra những kết quả khác nhau trên những case khác nhau
  10. Yêu cầu mới lại đến, thêm parameter tiếp, thêm câu điều kiện tiếp
  11. Và giờ đây đoạn code của bạn không còn dễ maintain, nói thẳng ra là một đống hầm bà lằng khó nuốt
  12. Chúc mừng, bạn đã bị over engineer và gây ra một abstract quá đỗi phức tạp

Vậy thì sao? Hãy thử WET (Write everything twice)

WET

Như cách chơi chữ đã thể hiện, nó là trường phái đối nghịch hoàn toàn với DRY, khi bắt đầu viết code, bạn sẽ không thể nào lường trước được mọi yêu cầu, mọi tính năng. Vì thế đừng vội vàng áp dụng abstraction

Bạn hãy nhớ

Cái giả phải trả cho duplicate vẫn rẻ hơn nhiều cho một abstract viết sai

Ví dụ bạn viết một ứng dụng, bạn dựng ra một component tên Button để sử dụng nhiều nơi, nghe rất hợp lý. Một yêu cầu mới xuất hiện, ở trang landing page họ muốn có một nút bấm rất fancy và không giống với tất cả những nút bấm trước đây.

Ok, thay đổi cũng nhỏ thôi, chỉ cần thêm tí điều kiện if..else, 90% phần code là của Button và 10% code là của FancyButton

Sự thật đáng buồn là sẽ có rất nhiều những thay đổi như thế xuất hiện và khả năng rất cao là bạn không đủ kinh nghiệm để có hiện thực những abstraction đủ dễ hiểu, dễ maintain.

Lời khuyên? Copy copy code đó ra, đừng ngần ngại

Bạn thấy quan điểm của mình bậy quá bậy!, bạn có thể tham khảo thêm quan điểm của Dan Abramov

The WET Codebase

In this talk, my aim was to show why strict adherence to writing code that is free of duplication inevitably leads to software we can’t understand

Tạm dịch, tuân thủ nghiêm ngặc quy tắc DRY sẽ dẫn đến một phần mềm mà chúng ta không hiểu nổi nó.

Bài viết gốc được đăng tải tại vuilaptrinh.com

Có thể bạn quan tâm:

Xem thêm các tuyển dụng ngành IT mới nhất tại Station D

Bài viết liên quan

Ngành IT: Làm việc “trên mây” kiếm nhiều tiền nhất hiện nay

Ngành IT: Làm việc “trên mây” kiếm nhiều tiền nhất hiện nay

Kết quả từ cuộc khảo sát đầu năm của Station D về lương bổng của lập trình viên cho thấy nhiều thay đổi đã và đang diễn ra trong ngành IT – cuộc khảo sát tập trung vào các câu hỏi về khối lượng công việc, triển vọng cũng như...

By stationd
Đâu chỉ mỗi Bitcoin, công nghệ Blockchain còn nhiều ứng dụng hơn thế!

Đâu chỉ mỗi Bitcoin, công nghệ Blockchain còn nhiều ứng dụng hơn thế!

Khi nhắc đến blockchain , lập tức mọi người thường nghĩ ngay đến các loại tiền mã hóa, chẳng hạn như bitcoin. Tuy nhiên, blockchain lại là công nghệ tạo ra tiền mã hóa nhưng bản thân công nghệ này không phải là tiền mã hóa như cách mà chúng...

By stationd
Mock phương thức static trong Unit Test sử dụng PowerMock

Mock phương thức static trong Unit Test sử dụng PowerMock

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Trong bài viết này, mình sẽ hướng dẫn các bạn Mock các phương thức static trong Unit Test các bạn nhé! Nếu bạn nào chưa biết về Mock trong Unit Test thì mình có thể nói sơ qua...

By stationd
Một "thuật ngữ ma" đã tồn tại 75 năm trên internet, nó đang "ám" vào các mô hình AI, và sẽ còn tiếp tục tồn tại cho đến vĩnh cửu

Một "thuật ngữ ma" đã tồn tại 75 năm trên internet, nó đang "ám" vào các mô hình AI, và sẽ còn tiếp tục tồn tại cho đến vĩnh cửu

Một lời cảnh báo cho những người thích trích dẫn kiểu "nguồn sưu tầm", "nguồn internet" hay "nguồn AI", họ có thể sẽ đào lên được những "hóa thạch số" vô nghĩa.

By admin
Cảnh Báo Malware Giả Mạo Hợp Đồng Việc Làm: Tập Tin .EXE Nguy Hiểm Đội Lốt PDF/Word

Cảnh Báo Malware Giả Mạo Hợp Đồng Việc Làm: Tập Tin .EXE Nguy Hiểm Đội Lốt PDF/Word

Kẻ xấu đang lợi dụng nhu cầu tìm việc để phát tán phần mềm độc hại (malware) dưới dạng tệp 'hợp đồng' giả mạo. Hãy cảnh giác với những file có icon Word/PDF nhưng thực chất là .exe. Nếu mở, máy tính của bạn có thể bị đánh cắp toàn bộ thông tin cá nhân, cookie và mật khẩu.

By admin