Vinova tuyển lập trình viên Mobile & Web ở Hà Nội, lương $300-1000

Article: Kiểm kê chất lượng mã Ruby 1040

ndgiang84.myopenid.com 2
Updated over 3 years ago

Theo kinh nghiệm của tôi, Ruby và Ruby on Rails là một trong những kết hợp của ngôn ngữ/framework khó đạt đến mức độ bậc thầy nhất. Với người biết C, C++ & Java chủ yếu nhờ được người khác training, Ruby có cách thiết kế hướng đối tượng rất khác (và cũng tốt hơn!), và Rails có rất nhiều thứ đáng học tập. Vì tôi đã mất nhiều thời gian để đạt đến trình độ hiện tại - và chắc chắn vẫn còn nhiều thứ phải học - tôi sẽ không bỏ nó mà quay lại với Java{#emotions_dlg.tongue_out}.

Tôi vẫn thầm nghi ngờ là khi Ruby on Rails ngày càng nổi, sẽ có rất nhiều lập trình viên mắc kẹt với lối suy nghĩ hướng đối tượng của Java, nhất là những người còn đang học chay; đó là điều rất tốt. Đó cũng là điều xấu, vì mã xấu sinh ra mã xấu, khi chúng được phổ biến và người khác lỡ xem.

Khi công ty ThriveSmart của chúng tôi tuyển thêm lập trình viên - không phải tất cả đều là chuyên gia - chúng tôi có nhu cầu vẫn giữ được mã và thiết kế ở mức chất lượng cao ở các project khác nhau. Bạn Dan và tôi đã lập ra bản kiểm kê này và bắt mọi người kí khi làm project. Bản kiểm kê này sẽ còn tiến hoá, dưới đây là phiên bản mới nhất.

Kiểm kê

  1. Mỗi action của controller chỉ gọi một phương thức của model, ngoại trừ find hoặc new. (Có thể override .new hoặc .update trong model).
  2. Chỉ dùng một vài biến instance để truyền dữ liệu từ controller sang view.
  3. Tên của tất cả model và biến đều nhìn phát hiểu ngay và càng ngắn càng tốt mà không viết tắt.
  4. Tất cả "find" được dùng ở nhiều nơi với cùng tham số phải viết thành named scope chứ không phải phương thức bình thường.
  5. Không gọi .find hoặc .find_by_ ở view hoặc view helper.
  6. Không chế lại bánh xe đã có sẵn trong Rails.
  7. Phải refactor mã thường xuyên.
  8. Tính năng dùng ở nhiều model phải viết thành thư viện/module.
  9. Tính năng dùng ở nhiều chương trình phải viết thành plugin cài được từ gem.
  10. Không lạm dụng STI.
  11. Không thiết kế hoặc viết mã dựa vào phỏng đoán cho tương lai.
  12. Viết test cho toàn bộ action của controller. Chỗ nào càng được người dùng dùng nhiều thì càng phải test kĩ.
  13. Test xong mới được commit.
  14. Sau khi sửa xong lỗi ở sản phẩm đã giao cho khách, vẫn phải viết test để tránh cho lần sau.
  15. Phải code review mọi plugin dùng trong project.

Tôi đảm bảo tuân theo những điều trên khi làm project.
      [Tên viết hoa toàn bộ]              [Chữ kí]    

Giải thích

đối với các lập trình viên có kinh nghiệm thì tuân theo các mục trên đây như là 1 bản năng và không cần phải giải thích gì thêm. tuy nhiên không ai có thể giỏi ngay từ đầu, nên ta sẽ tìm hiểu từng mục một. 

1. mỗi controller action chỉ gọi 1 model method ngoài find và new. Có thể override các method .new và .update nếu cần

Model và Controller có quan hệ mật thiết tuy nhiên chúng k phải vợ chồng, vì thế có “tốt mái” thì cũng chẳng “hại trống”. Chủ trương code Rails là “Model mập, Controller ốm”.  Trong hầu hết tất cả trường hợp, các hàm đều có thể đưa vào Model thay vì để chúng trong Controller, khi đó Controller sẽ rất gọn gàng. Các hàm .new và .update_attributes được viết lại trong Model. Chẳng hạn, 1 user update 1 attribute: @foo.update_attributes_by_user(params[:foo], current_user).

Chỉ để các hàm trong Controller (chứ không phải trong Model) nếu trong đó sử dụng render (đến action khác) hoặc redirect. 

2. chỉ dùng 1 vài biến instance để truyền dữ liệu từ controller sang view.

Dùng càng nhiều càng dễ nhầm lẫn. tốt nhất là truyền 1 biến thôi, 1 biến còn lại có thể dành cho current_user 

Chẳng hạn khi tạo 1 blog  , thay vì tạo ra 2 biến @post và @related_posts trong Controller rồi truyền sang View để display, chỉ cần 1 biến @post và 1 method “related_posts” trong model Post. Khi đó trong View chỉ cần gọi @post.related_posts là mọi thứ bày ra trước mắt. 

3. tên của các Model và biến phải nhìn phát hiểu được ngay, càng ngắn càng tốt mà không viết tắt 

đặt tên không phải dễ. nhất là khi đang chìm đắm trong mớ code lùng bùng. hoặc có thể lúc này đầu óc minh mẫn nhưng với người mới join hoặc tự dưng *ngu* đột xuất thì cũng khó mà hiểu ý nghĩa cái tên nếu đặt tên 1 cách tùy hứng.

khi bắt tay vào viết 1 method nếu chưa thể nghĩ ra tên cho nó ngay, không sao, cứ thế viết cho xong cái method đấy đã.  rồi nhìn lại toàn bộ project để tìm 1 cái tên thích hợp. 

[Còn tiếp]

Nguồn: Ruby on Rails Code Quality Checklist

 

1 2 

Editors
nguoitapdich.myopenid.com 35
ndgiang84.myopenid.com 2

Comments

tiendung.myopenid.com
over 3 years ago

Bản liệt kê này hay. Có thể áp dụng được liền. Cám ơn nguoitapdich đã chia xẻ :)

You must login to be able to comment

Uploaded files

No file uploaded yet

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content