Refactor code với gem flay
1. Đặt vấn đề Trong quá trình code, việc giữ cho code rõ ràng và không bị lặp lại luôn là vấn đề quan trọng và khó khăn cho dù đối với những người lập trình giỏi. Khi team work, có thể sẽ sinh ra những đoạn code thừa, ko sử dụng nữa nhưng lại không dám xóa đi. Càng ngày số lượng code càng tăng ...
1. Đặt vấn đề Trong quá trình code, việc giữ cho code rõ ràng và không bị lặp lại luôn là vấn đề quan trọng và khó khăn cho dù đối với những người lập trình giỏi. Khi team work, có thể sẽ sinh ra những đoạn code thừa, ko sử dụng nữa nhưng lại không dám xóa đi. Càng ngày số lượng code càng tăng lên tỉ lệ với việc quản lý code khó khăn hơn. Nếu không giải quyết những vấn đề phát sinh sớm thì quá trình nâng cấp và bảo trì sẽ rất khó khăn và tốn công sức.
2. Cách giải quyết May mắn là chúng ta có gem flay có thể giúp việc refactor code dễ dàng hơn. Nó giúp đỡ việc duy trì tối ưu hóa code. Flay kiểm tra mã cho sự giống nhau về cấu trúc các đoạn code. Sự khác nhau về giá trị ngữ nghĩa, tên biến, method, class, dấu cách, phong cách lập trình, dấu ngoặc nhọn, do/end đều được bỏ qua.
3. Sử dụng gem flay Cài đặt gem
sudo gem install flay
Sử dụng gem
cd “path to your project folder” flay .
hoặc
flay “path of the folder”
Và đây là kết quả:
➜ legalF_app git:(develop) flay app Total score (lower is better) = 9972 1) IDENTICAL code found in :attrasgn (mass*2 = 268) app/views/kaminari/paging/_paginator.html.erb:1 app/views/kaminari/search/_paginator.html.erb:1 2) Similar code found in :attrasgn (mass = 255) app/views/search/law_firms/_search_by_detail_condition.html.erb:21 app/views/search/law_firms/_search_by_detail_condition.html.erb:32 app/views/search/law_firms/_search_by_detail_condition.html.erb:61 app/views/search/law_firms/_search_by_detail_condition.html.erb:72 app/views/search/law_firms/_search_by_detail_condition.html.erb:83 3) IDENTICAL code found in :defn (mass*2 = 228) app/services/import_mapping_article_service.rb:123 app/services/import_mapping_question_service.rb:126 4) Similar code found in :if (mass = 212) app/views/layouts/front/_account_actions_header.html.erb:1 app/views/layouts/shared/_account_actions_header.html.erb:1 ...
Từ đó chúng ta tìm những đoạn code có thể refector và refector lại. Những đoạn code lặp có thể refector theo sơ đồ sau:
4. Kết luận Đối với những lập trình viên có kinh nghiệm khi làm những project nhỏ thì việc này sẽ không cần thiết. Tuy nhiên với những dự án lớn hay những người mới lập trình thì gem này sẽ giúp tăng khả năng bảo trì và phát triển codebase. Cảm ơn vì đã quan tâm bài viết!