Một vài lưu ý khi code Rails
White

checkraiser viết ngày 31/05/2016

Bài viết này, là 1 quan điểm cá nhân trong việc viết Code các layer trong Rails của mình.

Controller

Trước khi code, bạn hãy đặt câu hỏi: Mục đích của controller này là gì ? Đi vào chi tiết hơn:

  • Intention của nó: mang lại điều gì cho người sử dụng nó.
  • Input của nó: chính là các params bạn truyền vào.
  • Output của nó: chính là cách bạn trả về http response: http code bao nhiêu, body chứa nội dung gì, cookie thay đổi không,...
  • Side-Effect của nó: Nó có chạm tới các component khác trong hệ thống không ? Ví dụ có lưu dữ liệu vào database không, có truyền 1 event qua redis hay không, có cập nhật lại cache hay không ,...

Sau khi đã phân tích bước trên, bạn bắt đầu viết controller test cho cái controller của bạn.

Câu hỏi tiếp theo là, bạn test cái gì ?

  • Happy path : bạn truyền vào params chuẩn để kiểm tra toàn bộ mọi thứ xảy ra như ý bạn muốn (thoả mãn được cái intention ban đầu)
  • Sad path : Bạn truyền các params cho các trường hợp mà bạn biết sẽ xảy ra lỗi.

Tiếp theo, bạn viết gì trong controller ?

  • Authenticate user: Bước này thường đặt ở ApplicationController dưới dạng before_action để kiểm tra người đang đăng nhập hệ thống là ai (current_user )
  • Authorize user : Bước này để xác nhận quyền thực thi action controller của current_user.
  • Pre-processing params : Đây là bước bạn nhào nặn bộ params trước khi đưa vào các bước xử lý tiếp theo. Bước này có thể là optional trong trường hợp params không quá phức tạp.
  • Validate params: Kiểm tra cấu trúc params có đúng format bạn mong muốn hay không.
  • Xử lý logic dựa vào params: Đây là những thay đổi hệ thống sẽ xảy ra
  • Trả về response theo happy path (200 http status code)

Model:

Các vai trò của 1 Model là:

  • Mô tả 1 đối tượng trong bài toán cụ thể.
  • Nếu nó map trực tiếp với 1 database table , kế thừa nó bởi ActiveRecord::Base .
  • Mô tả mối quan hệ với các đối tượng khác. Nếu nó kế thừa bởi ActiveRecord::Base, bạn có thể sử dụng các phương thức has_many, belongs_to để tiện lợi trong việc sử dụng các lệnh tương tác với database .
  • Validate params : Một model có thể kiểm tra các input params khi thay đổi trạng thái của nó.

Lưu ý :

  • Các model thường được gọi ở tầng Controller để thay đổi trạng thái của nó.
  • Không nên thay đổi trạng thái của Model khác từ 1 model khác.
  • Để reuse logic, bạn có thể tạo các Service Object nhỏ. Tưởng tượng bạn có thể dùng 1 object CreateUser trong active_admin, rails console, rails controller ,... Nếu cần phải reuse , hãy reuse nó.
Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

checkraiser

17 bài viết.
20 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
6 1
Tôi dự sẽ viết 1 loạt series về việc thiết kế 1 ứng dụng Rails như thế nào để nó có thể giúp bạn ăn ngon ngủ yên trong hằng năm trời: Khi mà việc t...
checkraiser viết hơn 2 năm trước
6 1
White
5 10
Cũng ngót nghét đi làm hơn 6 năm rồi, mình chỉ thấy một điều khá "ngược đời": Các ông chủ , những người trả tiền cho bạn lại có tư duy lập trình ké...
checkraiser viết 10 tháng trước
5 10
White
3 3
This post is a sample chapter from my (Link) How to render a ReactJS component isomorphically ? The trick is in defaultProps and componentDidM...
checkraiser viết 3 năm trước
3 3
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
17 bài viết.
20 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!