HomeOur Team
Code Refactoring - Thay đổi nhỏ, lợi ích lớn
Tips / Tricks
Code Refactoring - Thay đổi nhỏ, lợi ích lớn
nam.pham
nam.pham
March 25, 2021
3 min

Mở đầu

Một lần làm xong dự án thì thấy tự dưng sếp đứng sau bảo code bẩn lắm cần phải Refactoring code đi. Vẫn chưa hiểu là gì, mình quyết định tìm hiểu về nó thì đúng là 1 chân trời mới. Nay mình quyết định share với anh em đề trở thành 1 coder mới

Refactoring Code là gì

Refactoring về cơ bản nó là một quá trình cải thiện code, có thể cải thiện cả cơ sở dữ liệu trong khi vẫn duy trì các chức năng hiện có. Ý tưởng là chuyển đổi code không hiệu quả, hay code phức tạp thành code hiệu quả hơn, đơn giản, tốt hơn và dễ dàng hơn.

Tại sao phải refactoring code

Refactoring không hề làm hệ thống chạy nhanh hơn, bảo mật hơn tuy nhiên nó sẽ giúp source code :

  • Dễ tiếp cận,
  • Dễ đọc,
  • Dễ hiểu từ đó giúp ích rất nhiều cho quá trình bảo trì
  • Mở rộng hệ thống.

Source code như thế nào thì cần refactoring

  • Vẫn còn những đoạn code dư thừa hoặc giống hệt nhau
  • Khai báo ra những biến (variables) nhưng chúng lại không được sử dụng ở bất cứ đâu trong chương trình
  • Thiết kế code quá phức tạp và dài dòng
  • Sự tồn tại của quá nhiều điều kiện và vòng lặp, có khả năng “đập đi xây lại” khi có điều kiện thay đổi
  • Xây dựng đoạn code có khả năng bị thay đổi khi có những thay đổi từ đoạn code hay module khác

Một số Smell

Phương thức dài quá

Dấu hiệu:

  • Quá nhiều dòng code
  • Có quá nhiều tầng code
  • Độ phức tạp cao

Xử lý:

  • Tách phương thức
  • Sử dụng Parameter Object
  • Phân tách các khối lệnh điều kiện

Lớp to quá

Dấu hiệu:

  • Có quá nhiều trường
  • Có quá nhiều phương thức
  • Có quá nhiều dòng code

Xử lý:

  • Tách lớp
  • Tách lớp con
  • Tách interface

Mã bị lặp

Dấu hiệu:

  • Hai hoặc nhiều đoạn mã nhìn gần giống nhau

Xử lý:

  • Tách phương thức
  • Tách lớp cha
  • Chuyển thành template method
  • Thay thế thuật toán

Kỹ thuật refactoring

Kỹ thuật đổi tên biến

  • Thay đổi tên biến hoặc phương thức để trở nên tốt hơn: dễ đọc, có ý nghĩa, thể hiện được ý nghĩa, tuân thủ coding convention

  • Khi đổi tên biến hoặc phương thức cần lưu ý:

    • Đổi tên tại vị trí khai báo
    • Đổi tên tại tất cả các vị trí có sử dụng biến hoặc phương thức

Kỹ thuật tách biến

  • Trong nhiều trường hợp, các biểu thức phức tạp sẽ gây khó hiểu
  • Tách biến (Variable Extraction) là kỹ thuật giúp đơn giản hoá các biểu thức và giúp dễ hiểu hơn

Kỹ thuật tách hằng

  • Trong nhiều trường hợp, các giá trị “thần kỳ” (magic value) sẽ gây khó khăn cho việc đọc hiểu mã nguồn
  • Tách hằng giúp mang lại ý nghĩa cho các giá trị “thần kỳ” và mã nguồn dễ hiểu hơn

Kỹ thuật tách phương thức

  • Trong nhiều trường hợp, một phương thức quá dài, quá phức tạp hoặc xử lý quá nhiều tác vụ sẽ dẫn đến khó hiểu, khó kiểm soát
  • Tách phương thức giúp cho các phương thức dễ đọc hiểu hơn, dễ kiểm soát hơn

Áp dụng refactoring vào thực thế sẽ như nào

Example 1:

1

Như đoạn code này vẫn chạy bình thường nhưng nếu 1 người coder khác nhìn vào họ sẽ phải check xem từng điều kiện trong vòng lặp IF là gì . Như vậy là rất tốt thời gian khi chỉ đọc điều kiện. Chúng ta sử dụng phương pháp tách biến xem có gì khác biệt

2

Tách từng điều kiện thành 1 biến và có tên rõ ràng. Như vậy sau khi sửa lại rõ ràng người đọc gần như không cần comment thêm gì, người đọc vẫn hiểu được đoạn code , rất hay đúng không anh em

Example 2 :

3

Như các bạn thấy function bên tay trái có điều kiện if(role == 1) ,nếu chúng ta lần đầu đọc code thì sẽ không hiểu là gì. Nhưng khi viết theo bên tay phải sử dụng phương pháp tách hằng bạn sẽ hiểu ngay là hàm kiểm tra có phải admin không

Example 3 :

4

Ở ví dụ này function tính thể tích làm 3 việc

  • Tính diện tích đáy
  • Tính chu vi
  • Tính thể tích

Như vậy đang vi phạm tiêu chuẩn Solid và nếu viết unit test cho function này sẽ rất khó. bạn phải check đồng thời cả việc tính diện tích đáy tính chu vi tính thể tích. Rất nặng nhọc đúng không. Sau khi tách biến xong function của chúng ta rất nhẹ nhàng dễ hiểu 1 function làm 1 nhiệm vụ. Dễ đọc dễ hiểu dễ test nhở :D


Tags

202103basicclean-code
nam.pham

nam.pham

Developer

Related Posts

Nâng cao bảo mật ứng dụng bằng Android NDK
Nâng cao bảo mật ứng dụng bằng Android NDK
March 26, 2021
4 min
System operator: Những câu chuyện chưa từng được kể (Phần 1)
Others
System operator: Những câu chuyện chưa từng được kể (Phần 1)
March 31, 2021
5 min
Why Protocol-Oriented Programming?
Articles
Why Protocol-Oriented Programming?
March 31, 2021
2 min
© 2021, All Rights Reserved.

Quick Links

HomeOur Team

Social Media