Menu

  • Trang chủ
  • Trending
  • Gợi ý bạn đọc
  • Tiktok hôm nay có gì?

Chuyên mục

  • Tin tức
  • Hackintosh
  • Lập trình
  • Software
  • Thủ thuật
  • Chia sẻ
  • GenZA Can Cook
  • GenZA Beauty
  • Cảm nhận cuộc sống

Liên hệ hợp tác

admin@genzakit.com
Genzakit
Không có kết quả phù hợp
Xem tất cả kết quả
  • Đăng nhập
Genzakit
Không có kết quả phù hợp
Xem tất cả kết quả

Tôi tái cấu trúc code, refactor như thế nào cho hiệu quả?

390
CHIA SẺ
2.6k
LƯỢT XEM
Chia sẻ lên FacebookChia sẻ lên TwitterLưu lại trên Pinterest

Tái cấu trúc code là một phần việc hết sức cơ bản của mọi developer. Tuy nhiên, tôi đã tìm thấy tương đối ít resource nói sâu về vấn đề này.

Hãy bắt đầu câu chuyện về những nhà “tái cấu trúc” vĩ đại

Đầu tiên, tôi có hai functionfetch (tìm nạp) này nằm rải rác ở khắp nơi trong codebase của tôi với các tên hơi khác nhau mà tôi muốn cấu trúc lại thành một module duy nhất của các function có thể sử dụng lại nhiều lần. Đây chỉ là hai trong số chúng:

Tôi không phải là một người ủng hộ nguyên tắc DRY một cách cực đoan, nhưng điều tạo cho tôi cảm giác khá cồng kềnh. Mỗi function chỉ làm được rất ít những gì chúng có thể đạt được chỉ với tìm nạp những thứ nó bao hàm. Ngoại trừ việc đóng gói các URL endpoint và thuộc tính của method, hai function này trông giống hệt nhau và nên điều chỉnh để có thể sử dụng lại trong toàn bộ codebase.

Function nên “thuần” khi có thể

Tiêu chí đầu tiên và quan trọng nhất của tôi cho một function là nó nên được tái cấu trúc để trở nên thuần khi có thể. Sự “thuần” này có nghĩa là tính có thể tái sử dụng. Khi cần thay đổi bất kỳ shared state (trạng thái dùng chung, nó có thể là một sự lựa chọn cho một method. Điều này khiến cho function dễ test và có thể sử dụng lại được. Một số function có tên nhưpostLoginData đã vi phạm điều này. Dưới đây là một số các để tái cấu trúc nó mà không cần phải suy nghĩ vềsự hoàn thiện của đoạn code:

  • user.login()
  • login(user)
  • post(loginUrl, user)

Danh sách trên đã được sắp xếp từ theo thứ tự từ ít khái quát nhất đến có khả năng sử dụng lại cao nhất. Trên thực tế, hai function đầu tiên có mức độ khái quát giống nhau. Chỉ có cái cuối là có thể tái sử dụng, và đó là những gì tôi sẽ làm.

Bây giờ, bạn có thể thấy những điểm vi phạm ở 2 function đầu tiên của tôi. Đôi khi, bạn đội những chiếc mũ khác nhau và ưu tiên những thứ khác nhau. Nó vẫn ổn nếu đôi khi bạn đi hơi nhanh để khiến code hoạt động, miễn là thỉnh thoảng bạn dừng lại và dọn dẹp mọi thứ một chút.

Điều chỉnh tái cấu trúc

Để quyết định xem một thứ có nên được tái cấu trúc hay không, tôi thường nghĩ về mục đích và sự xứng đáng của việc tạo ra 1 function cho nó.

Ví dụ, một function dùng để “đăng” (post) và một function dùng để nhận (get) data có sự khác biệt cơ bản về ý định, bất chấp việc chỉ có 1 sự khác biệt nhỏ trong cách thực hiện. Các ý định được phân biệt rõ ràng đủ để giải thích cho việc tại sao lại tạo ra 2 function.

Tuy nhiên, việc gói một URL tùy ý vào một function, ví dụ như một login API endpoint, sau đó đặt tên cho function là postLoginData không thêm nhiều giá trị vào một function xét về việc làm giảm mức độ tổng quát của nó. URL, ngoài việc là một chuỗi lót, còn nên là một “câu chuyện” của caller. Hãy xem một nghệ sĩ với sơn dầu, bảng màu và cọ. Những gì họa sĩ muốn vẽ nên là câu chuyện của họa sĩ. Bảng màu, bộ sưu tập sơn và cọ chỉ nên cung cấp các biến thể để hỗ trợ cho đối tượng đó. Bạn có thể tưởng tượng một bộ sơn để vẽ cảnh đại dương không? Đó là điều hợp lý. Bây giờ làm thế nào về một để vẽ một con tàu. Hoàn toàn không dễ phải không? Các chủ để là quá cụ thể để được gói gọn.

Nếu không có thêm rắc rối nào khác, đây là bộ tái cấu trúc thứ hai:

Bây giờ code của chúng ta đã trông gọn gàng hơn với các thuộc tính đối tượng cấu hình lặp đi lặp lại được tái cấu trúc thành một hằng sốbaseConfig . Ngoài ra, tôi đã thêm một tham số tùy chọn config đến từng function để khiến chúng có thể cấu hình từ bên ngoài. Object.assign được dùng để hợp nhất cấu hình tùy chỉnh config vớibaseConfig .

Ta có thể thấy mọi thứ đã có vẻ hiệu quả. Tại thời điểm này, tôi khá hài lòng, nhưng với thời gian rảnh rỗi, tôi quyết định xem liệu tôi có thể rút ra được điều gì nữa không. Đây là bản tái cấu trúc cuối cùng:

Cá nhân tôi thích phiên bản này nhất vì functionget vàpost là các hàm bao rất mỏng lên function send vừa mới được tạo. Từ nay về sau, khi có bug, ta chỉ cần debug ở điểm trên.

Tái cấu trúc là một công việc khá khó để vận dụng, không phải vì nó khó mà vì nó cần tư duy thiết kế sâu hơn. Và đừng lầm tưởng, bạn đã sẽ không thể nào khiến nó phù hợp cho tất cả mọi người. Việc tái cấu trúc để code có thể sử dụng lại được có thể khiến cho ai đó cảm thấy mất hứng thú một cách bất ngờ, đặt biệt là khi sự đánh đổi nhiều hơn những gì bạn nhận lại được. Do đó, sự cân bằng là cái mà ta cần hướng đến. Có các yếu tố khác như quy ước đặt tên và các tham số function đều có thể trợ giúp cho khả năng truy cập và chúng luôn luôn cần bàn phải suy nghĩ kỹ.

Từ khoá: cấu trúccoderefactor
Next Post

Gỡ cài đặt nhiều ứng dụng cùng lúc trên Android

Theo dõi
Đăng nhập
Thông báo của
guest
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Có thể bạn quan tâm

Cách làm bánh gối ngon giòn tại nhà bằng bột mì

Cách làm bánh gối ngon giòn tại nhà bằng bột mì

by Huệ Minh
10 Tháng Mười, 2021
0
2.6k

Bánh gối hay bánh xếp là một loại bánh xuất xứ từ bánh há cảo chiên của Trung Quốc. Ngoài bánh gối hấp, bạn...

Google sẽ ngừng đồng bộ ảnh, video giữa Google Photos và Google Drive

by Anthony Tran
13 Tháng Sáu, 2019
0
2.6k

Google sẽ đổi cách mà Drive và Photos đồng bộ dữ liệu với nhau. Kể từ ngày 10/7,...

Cấu trúc một bộ source SASS thế nào cho đẹp

by Anthony Tran
20 Tháng Chín, 2019
0
3.3k

Ở bài trước, mình đã chia sẻ với các bạn một số tips để coding "vở sạch chữ đẹp". Để...

Cách nấu xôi ngũ sắc từ rau củ quả

Cách nấu xôi ngũ sắc từ rau củ quả

by Huệ Minh
10 Tháng Mười, 2021
0
2.6k

Xôi ngũ sắc là món ngon đặc sản của núi rừng Tây Bắc. Bằng các thứ lá cây...

  • Giới thiệu
  • Liên hệ
  • Chính sách bảo mật

© 2021 Genzakit

Không có kết quả phù hợp
Xem tất cả kết quả
  • Trending
  • Gợi ý bạn đọc
  • Tin tức
  • Hackintosh
  • Lập trình
  • Software
  • Thủ thuật
  • Chia sẻ
  • GenZA Can Cook
  • GenZA Beauty
  • Vui mỗi ngày
  • Cảm nhận cuộc sống

© 2022 Genzakit - Ngôi nhà giới trẻ

Chào mừng trở lại!

Đăng nhập bằng Facebook
Sign In with Google
OR

Đăng nhập

Quên mật khẩu?

Retrieve your password

Please enter your username or email address to reset your password.

Đăng nhập
wpDiscuz